在TO_NUMBER(Oracle)中限制千位分隔符

时间:2014-11-07 22:34:04

标签: oracle oracle10g

我尝试使用以下代码解析数字

TO_NUMBER('1,234.56', '9999999D99')

由于某些原因,comma被忽略并且值被正确解析,尽管格式没有。有没有办法限制使用千组分隔符?

到目前为止,我只想设置一个伪造的符号作为分隔符,希望用户不会使用它

TO_NUMBER('1,234.56', '9999999D99', 'NLS_NUMERIC_CHARACTERS=''.ã''');

1 个答案:

答案 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}}中描述的格式掩码的默认值适用:

  

默认数字格式将句点(。)标识为小数点,并且不识别任何其他符号。

反过来,这意味着逗号是转化的无效值,因此转换将失败。