oracle格式指定符:to_number vs to_char
-
16-10-2019 - |
题
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;
将字符转换为数字时,格式规范必须完全匹配,但是当将数字转换为字符时,可以使用格式指定符选择性提取数字。
不隶属于 dba.stackexchange