十进制分隔符oracle

问题描述:

我需要用点替换逗号,然后我需要我的值为数字。 所以我写了这一点:十进制分隔符oracle

select replace('12345,6789', ',' , '.') from dual --it works fine 

但后来我想转换to_number是价值,我得到的错误:

"invalid number"

+0

http://*.com/search?q=NLS_NUMERIC_CHARACTERS – Mottor

+2

的可能的复制[NLS \ _NUMERIC \ _CHARACTERS设置为十进制](http://*.com/questions/24571355/nls-numeric-characters-setting-for-decimal) – Mottor

to_number() function使用会话的NLS_NUMERIC_CHARACTERS设置,以决定如何解释逗号和句号。如果您知道您的字符串将始终以逗号作为小数分隔符,那么可以使用可选的第三个参数将其作为调用的一部分进行覆盖;虽然这并不意味着你必须指定格式模型:

select to_number('12345,6789', '9999999999D9999', 'NLS_NUMERIC_CHARACTERS='',.''') 
from dual; 

TO_NUMBER('12345,6789','9999999999D9999 
--------------------------------------- 
          12345.6789 

你并不需要一个单独的replace()一步。

您也可以使用ALTER SESSION SET NLS_NUMERIC_CHARACTERS=',.';更改会话的设置,但是您可能无法控制必须运行代码的每个客户端的设置。

小数点分隔符在您的语言环境中定义。这看起来像是,。所以,你不必将你的字符串前做替换:

select to_number('12345.6789') from dual --should work already 

或更改您的区域设置:

alter session set NLS_NUMERIC_CHARACTERS= '.,'; 
select to_number('123'||'.'||'456') from dual; 
select to_number(replace('12345,6789', ',' , '.')) from dual