,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