小编典典

十进制分隔符oracle

sql

我需要用点替换逗号,然后我需要将值设为数字。所以我这样写:

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

但是然后我想转换to_number该值,然后出现错误:

"invalid number"


阅读 249

收藏
2021-04-22

共1个答案

小编典典

to_number()函数使用会话的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=',.';,但可能无法在每个必须运行代码的客户端中控制该设置。

2021-04-22