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

posted @ 2020-12-22 09:29  masha2017  阅读(2185)  评论(0编辑  收藏  举报