原因分析:
1.显式原因:
即字段中存在非数字的字符。
解决方法:(1)替换掉非数字的字符。
(2)使用 ORACLE的regexp_like函数,过滤掉含有非数字字符的记录。
例如:
select * from table1 T1
where regexp_like(T1.字段名,' ^[[:digit:]]+$') --这里使用到了正则表达式,详情请参考http://blog.csdn.net/qq_21909121/article/details/73469118
2.隐式原因:
就是对某个字段进行使用一些函数后,字段的类型已经转换成了VARCHAR2类型,VARCHAR2存在着全角和半角符号之分。
当这个字段是全角字符时,即使你看到该字段是纯数字,但是在where子句中使用to_number,却提示ORA-01722异常。
解决方法:
在select语句中对该字段进行to_number转换,然后在嵌套一个查询语句,在where子句中to_number(字段),即可。
例如:select T2.A , T2.B from table2 T2
where to_number(T2.B) -100 < 0
------------------提示ORA-01722-----------------------
--多嵌套一个查询语句
select * from (
select T2.A ,to_number(T2.B) from table2 T2
where ……
) T3
where to_number(T3.B) - 100 < 0