,Oracle都不会抱怨,如果数字格式太长,所以你可以使用具有足够的数字,以应付最大数量的模型,你可以得到:
SQL> select to_number('12,345',
2 '999G999G999G999G999G999G999G999G999G999G999G999G999') from dual;
TO_NUMBER('12,345','999G999G999G999G999G999G999G999G999G999G999G999G999')
-------------------------------------------------------------------------
12345
SQL> select to_number('1,234,567',
2 '999G999G999G999G999G999G999G999G999G999G999G999G999') from dual;
TO_NUMBER('1,234,567','999G999G999G999G999G999G999G999G999G999G999G999G999')
----------------------------------------------------------------------------
1234567
SQL> select to_number('999,999,999,999,999,999,999,999,999,999,999,999,999',
2 '999G999G999G999G999G999G999G999G999G999G999G999G999') from dual;
TO_NUMBER('999,999,999,999,999,999,999,999,999,999,999,999,999','999G999G999G999
--------------------------------------------------------------------------------
1.0000E+39
我已经使用了G
group separator而不是一个固定的逗号来支持全球化,但效果是一样的。
唯一需要注意的是,源数量必须有正确的组合,这样它的格式完全匹配的数字它确实有:
SQL> select to_number('1,2345',
2 '999G999G999G999G999G999G999G999G999G999G999G999G999') from dual;
select to_number('1,2345',
*
ERROR at line 1:
ORA-01722: invalid number
替代任何支持长度的字符串的更短的解决方案:http://stackoverflow.com/a/4143834/603516 – Vadzim 2015-01-15 16:44:53
@Vadzim - 有趣的是,我刚刚重新创建,并即将添加到此答案。但现在我看到我已经提出了文森特的回答,所以也许它一直潜伏在我的脑海里......由于分隔符位置不固定,“translate”可能会与我给出的最后一个示例一起工作,并且可以使用小数。谢谢。 – 2015-01-15 16:49:09