oracle筛选不能进行字符串转日期to_date()的数据
在oracle中,有时候需要对时间格式的字符串进行排序
比如说有个字段是TEST_TIME是varchar类型的,但是需要通过它对数据进行排序,就需要对字段进行to_date转换。但有时候数据中会出现脏数据(不能转换为date的数据)。导致报错。报错如下显示:
因此需要把脏数据给排除掉或者找出来删除掉。
因此需要写一个function把不能转换位日期的字符串找出来。思路就是把字符串转换为日期,如果成功就返回'Y',如果报错,就返回'N'
function如下显示:
CREATE OR REPLACE FUNCTION F_IS_DATE (I_DATE VARCHAR2) RETURN VARCHAR2 IS V_DATE DATE; BEGIN V_DATE := to_date(I_DATE,'yyyy-mm-dd hh24:mi:ss'); RETURN 'Y'; EXCEPTION WHEN OTHERS THEN RETURN 'N'; END F_IS_DATE;
然后这样就可以写出一个筛选不能转换为日期的字符串了。
sql如下:
select * from SFC_DATAGROUP_DJ where f_is_date(TEST_TIME)='N'
就能找出不能转换为日期的字符串了
同理:字符串转小数,字符串转整数等等都可以用相似的方式筛选出不符合要求的数据。
参考:https://zhidao.baidu.com/question/691902130567092484.html