我有一个带有数字的 VARCHAR2
,写成小数点和小数部分,例如.02
。使用时
TO_NUMBER(NUMBER_COLUMN)
我得到一个错误
ORA-01722: invalid number
表示格式无法识别。是否有内置的解决方法(我可以DECODE
或SUBSTR
来提供所需的零?
最佳答案
您遇到此错误不是因为您的 varchar 列中存在小数点 + 小数部分,而是因为您的 varchar 列包含非数字字符,在运行 to_number 时无法将其转换为数字。
我可以通过 this SQL fiddle 来证明这一点
它could also be that your NLS parameters与 Oracle 期望的小数点分隔符不同,因此抛出此错误。
您可以通过更改 NLS_NUMERIC_CHARACTERS
来更改 Oracle 期望作为小数运算符的字符参数。
ALTER SESSION SET NLS_NUMERIC_CHARACTERS = ".,"
将告诉 Oracle 期待 .
作为小数点和 ,
作为千位分隔符
关于当仅存在小数部分时,Oracle TO_NUMBER 转换失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11451965/