SQL> select TO_NUMBER(123.56,'999.9') from dual;
select TO_NUMBER(123.56,'999.9') from dual
                 *
ERROR at line 1:
ORA-01722: invalid number


SQL> select TO_CHAR(123.56,'999.9') from dual;

TO_CHA
------
 123.6

SQL>

我很难理解Oracle SQL的细微差别。例如,看看上面的两个查询。

为什么第一个查询失败,但第二个问题成功?

有帮助吗?

解决方案

根据 文档, ,to_number的第一个值必须是

binary_double值或char,varchar2,nchar或nvarchar2数据类型的值,该数据包含由可选格式模型指定的格式中的数字

因此,Oracle隐式将123.56转换为字符值。因此,问题是to_number的格式与给出的值不匹配。可以看到这是因为您会在以下两个变体中遇到相同的错误:

select to_number(to_char(123.56),'999.9') from dual;

select to_number('123.56','999.9') from dual;

但是您不为此:

select to_number(123.56,'999.99') from dual;

将字符转换为数字时,格式规范必须完全匹配,但是当将数字转换为字符时,可以使用格式指定符选择性提取数字。

许可以下: CC-BY-SA归因
不隶属于 dba.stackexchange
scroll top