当仅存在小数部分时,Oracle TO_NUMBER 转换失败

标签 oracle oracle10g type-conversion

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

TO_NUMBER(NUMBER_COLUMN)

我得到一个错误

ORA-01722: invalid number

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

最佳答案

您遇到此错误不是因为您的 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/

相关文章:

Java 从 oracle 返回陈旧数据

python - 使用列表理解更改列表中的多个元素

java - 尝试使用 OCI 连接到 Oracle 时 JVM 崩溃

sql - 添加索引后查询性能下降

sql - Oracle 日期比较

c++ - 为什么 int 到 long long int 的隐式转换会在 C++ 中给出意想不到的答案?

r - 如何在R中将NUM转换为INT?

Oracle DB 每日分区

sql - 为什么 Oracle 数据库不适用于 as

sql - Oracle sql查询Order By给出不同的结果