我需要用点替换逗号,然后我需要我的值是一个数字。
所以我写了这个:
select replace('12345,6789', ',' , '.') from dual --it works fine
但后来我想转换to_number
该值,我收到错误:
"invalid number"
The to_number()功能 http://docs.oracle.com/cd/E11882_01/server.112/e41084/functions211.htm#SQLRF06140使用会话的NLS_NUMERIC_CHARACTERS https://docs.oracle.com/cd/E11882_01/server.112/e40402/initparams154.htm#REFRN10126设置决定如何解释逗号和句号。如果您知道您的字符串始终有一个逗号作为小数分隔符,您可以使用可选的第三个参数覆盖它作为调用的一部分;尽管这确实意味着您必须指定格式模型:
select to_number('12345,6789', '9999999999D9999', 'NLS_NUMERIC_CHARACTERS='',.''')
from dual;
TO_NUMBER('12345,6789','9999999999D9999
---------------------------------------
12345.6789
你不需要单独的replace()
step.
您还可以使用以下命令更改会话的设置ALTER SESSION SET NLS_NUMERIC_CHARACTERS=',.'; http://docs.oracle.com/cd/E11882_01/server.112/e41084/statements_2013.htm#SQLRF00901,但是您可能无法控制必须运行您的代码的每个客户端中的设置。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)