2

我有VARCHAR2一个数字,写为小数点和小数部分,例如.02。使用时

TO_NUMBER(NUMBER_COLUMN)

我收到一个错误

ORA-01722: 无效号码

表示格式不被识别。是否有内置的解决方法(我可以DECODESUBSTR提供所需的零?

4

2 回答 2

4

您遇到此错误不是因为您的 varchar 列中存在 radixpoint + 小数部分,而是因为您的 varchar 列包含一个非数字字符,当 to_number 运行时无法转换为数字。

我可以通过这个 SQL fiddle来证明这一点

可能是您的 NLS 参数与 Oracle 期望的小数分隔符不同,因此引发此错误。

您可以通过更改NLS_NUMERIC_CHARACTERS参数来更改 Oracle 期望作为小数运算符的字符。

ALTER SESSION SET NLS_NUMERIC_CHARACTERS = ".,"

将告诉 Oracle 期望 a.作为小数点和,千位分隔符

于 2012-07-12T12:52:31.190 回答
3

我没有要尝试的 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 ', ')。

于 2012-07-12T12:48:16.573 回答