我有VARCHAR2
一个数字,写为小数点和小数部分,例如.02
。使用时
TO_NUMBER(NUMBER_COLUMN)
我收到一个错误
ORA-01722: 无效号码
表示格式不被识别。是否有内置的解决方法(我可以DECODE
或SUBSTR
提供所需的零?
我有VARCHAR2
一个数字,写为小数点和小数部分,例如.02
。使用时
TO_NUMBER(NUMBER_COLUMN)
我收到一个错误
ORA-01722: 无效号码
表示格式不被识别。是否有内置的解决方法(我可以DECODE
或SUBSTR
提供所需的零?
您遇到此错误不是因为您的 varchar 列中存在 radixpoint + 小数部分,而是因为您的 varchar 列包含一个非数字字符,当 to_number 运行时无法转换为数字。
我可以通过这个 SQL fiddle来证明这一点
也可能是您的 NLS 参数与 Oracle 期望的小数分隔符不同,因此引发此错误。
您可以通过更改NLS_NUMERIC_CHARACTERS
参数来更改 Oracle 期望作为小数运算符的字符。
ALTER SESSION SET NLS_NUMERIC_CHARACTERS = ".,"
将告诉 Oracle 期望 a.
作为小数点和,
千位分隔符
我没有要尝试的 Oracle 实例,但也许使用完整版本的 TO_NUMBER 会对您有所帮助:TO_NUMBER(column, '9999999999D99') 或 TO_NUMBER(column, 'B9999999999D99')
在此处阅读更多信息http://docs.oracle.com/cd/B19306_01/server.102/b14200/sql_elements004.htm
此外,如果您需要使用不同的小数分隔符,则可以将第三个参数指定为 TO_NUMBER。例如,TO_NUMBER('$94 567,00', 'L999G999D00', NLS_NUMERIC_CHARACTERS ', ')。