我有一个表,其中的数字存储为varchar2
和 '。'作为小数点分隔符(例如“5.92843”)。
我想使用“,”来计算这些数字,因为这是系统默认值,并且使用了以下内容to_number
去做这个:
TO_NUMBER(number,'99999D9999','NLS_NUMERIC_CHARACTERS = ''.,''')
我的问题是有些数字可能很长,因为该字段是VARCHAR2(100)
,当它比我定义的格式长时,我的to_number
失败了ORA-01722
.
有什么方法可以定义动态数字格式吗?
我并不真正关心格式,只要我可以设置我的小数字符即可。
有什么方法可以定义无限数量的格式吗?
唯一的方法是设置适当的值nls_numeric_characters
参数会话范围和使用to_number()
函数无需指定格式掩码。
这是一个简单的例子。小数分隔符是逗号","
并且数字文字包含句点"."
作为小数分隔符:
SQL> show parameter nls_numeric_characters;
NAME TYPE VALUE
------------------------------------ ----------- ------
nls_numeric_characters string ,.
SQL> with t1(col) as(
2 select '12345.567' from dual union all
3 select '12.45' from dual
4 )
5 select to_number(col) as res
6 from t1;
select to_number(col)
*
ERROR at line 5:
ORA-01722: invalid number
SQL> alter session set nls_numeric_characters='.,';
Session altered.
SQL> with t1(col) as(
2 select '12345.567' from dual union all
3 select '12.45' from dual
4 )
5 select to_number(col) as res
6 from t1;
res
--------------
12345.567
12.45
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)