我尝试使用以下代码解析数字
TO_NUMBER('1,234.56', '9999999D99')
由于某些原因,comma被忽略并且值被正确解析,尽管格式没有。有没有办法限制使用千组分隔符?
到目前为止,我只想设置一个伪造的符号作为分隔符,希望用户不会使用它
TO_NUMBER('1,234.56', '9999999D99', 'NLS_NUMERIC_CHARACTERS=''.ã''');
答案 0 :(得分:1)
这是一个非常奇怪的请求 - 如果Oracle正确地将字符串转换为数字,那么它似乎正在正确地完成它的工作。但是,如果确实因任何原因需要执行此操作,则只需删除格式掩码。
SQL> select to_number('1,234.56') from dual;
select to_number('1,234.56') from dual
*
ERROR at line 1:
ORA-01722: invalid number
SQL> select to_number('1234.56') from dual;
TO_NUMBER('1234.56')
--------------------
1234.56
SQL>
虽然SQL Language Reference未提及任何默认值,但我认为TO_NUMBER()
{{1}}中描述的格式掩码的默认值适用:
默认数字格式将句点(。)标识为小数点,并且不识别任何其他符号。
反过来,这意味着逗号是转化的无效值,因此转换将失败。