日期:2014-05-16  浏览次数:20923 次

关于TO_NUMBER函数中第二个参数
DECLARE
 a NUMBER;
BEGIN
  a := TO_NUMBER('$123,456.78','L999G999D99');
END;

参数2中的L,G,D分别是指定返回值中区域货币符号的位置,返回值中分组符的位置,返回值中小数点的位置

像这种'$123,456.78'字符串不指定格式确实会报错,那如果我传进的字符参数是未知的,我第二个参数应该怎么设置?
然后G的意思不是指返回值中分组符的位置吗,实际转换后的值是没有分组符的,为什么?

------解决方案--------------------
试了一下,在10g里
SELECT TO_NUMBER('123,456.78','999999D99') from dual;
即使不指定分组符的位置,一样可以的到正确的结果
------解决方案--------------------

--直接自动转换G
SELECT 
TO_NUMBER('-$321,909.10', 'L99999999999D99', 'NLS_CURRENCY= ''$''') "Amount"
FROM DUAL;


Format Models详情请看:
http://docs.oracle.com/cd/E11882_01/server.112/e26088/sql_elements004.htm#SQLRF51074