经常会把存放数字的字符型列转换为数字的情况,但是经常会出现 转换失败的情况,即出现ORA-01722:invalid number 错误;现在用一个函数来检测:
假设需要把第一列转换为数字型的列
select column_name1 , column_name2 ...... from test t
where trim(translate(t.column_name1,'0123456789',' ')) is not null;
这样就把那些不能转换为数字型的行找了出来;在此摘录一下 translate函数的用法:
语法:TRANSLATE(char, from, to)
用法:返回将出现在from中的每个字符替换为to中的相应字符以后的字符串。
若from比to字符串长,那么在from中比to中多出的字符将会被删除。
三个参数中有一个是空,返回值也将是空值。
SQL> SELECT TRANSLATE('2KRW229',
2 '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ',
3 '9999999999XXXXXXXXXXXXXXXXXXXXXXXXXX') AS "License"
4 FROM DUAL;
License
-------
9XXX999
某些情况下,要从一个字符串中,提取数字信息的,可以使用:
SQL> SELECT TRANSLATE('2KRW229',
2 '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ', '0123456789')
3 AS "Translate example"
4 FROM DUAL;
Tran
----
2229