小数分隔符oracle
decimal separator oracle
我需要用点替换逗号,然后我需要我的值是一个数字。
所以我写了这个:
select replace('12345,6789', ',' , '.') from dual --it works fine
但后来我想转换 to_number
这个值,我得到了错误:
"invalid number"
to_number()
function uses the session's 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
我需要用点替换逗号,然后我需要我的值是一个数字。 所以我写了这个:
select replace('12345,6789', ',' , '.') from dual --it works fine
但后来我想转换 to_number
这个值,我得到了错误:
"invalid number"
to_number()
function uses the session's 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