数据库是字符串类型我写了这样的语句转换为时间可是里面有许多不符合月份的时间的,比如
里面有非法字符,月份还有200913271706  时间还有200707052507点,郁闷啊,语句相减用都用不来
语句select * from t_ch_pre where to_date(insert_time,'yyyy-mm-dd   HH24:mi:ss')-to_date(in_time,'yyyy-mm-dd   HH24:mi:ss')>1
大于1天
广大高手出个简单易行的方法,相减后统计出来超过1天的语句

解决方案 »

  1.   

    先写一个函数,判断insert_time和in_time是否符合时间格式,如果符合,返回0,不符合则返回-1
    CREATE OR REPLACE FUNCTION CHECK_DATE(p_date VARCHAR2) RETURN NUMBER
    AS
      v_date DATE;
    BEGIN
      SELECT to_date(p_date,'yyyymmddHH24miss')
        INTO v_date
        FROM dual;
      RETURN 0;
      EXCEPTION WHEN OTHERS THEN
      RETURN -1;
    END;
    /SELECT insert_time
      FROM t_ch_pre 
     WHERE check_date(insert_time)=-1;
    找出返回不符合的insert_time,进行修改,然后再执行SELECT  * FROM t_ch_pre
     WHERE to_date(insert_time,'yyyymmddhh24miss')-to_date(in_time,'yyyymmddhh24miss')>1;如果不想修改insert_time和in_time,只计算符合条件的insert_time和in_time,则执行SELECT * FROM t_ch_pre
    WHERE to_date(insert_time,'yyyymmddhh24miss')-to_date(in_time,'yyyymmddhh24miss')>1
      and check_date(insert_time)=0 and check_date(in_time)=0;
      

  2.   

    写个函数,对insert_time和in_time字段存在特别字符的全去除,直到完成可以转换为时间字段为止...