如果start_date为字符,则无许转换,如为date,则如下:
select * from table 
where (substr(to_char(start_date,'YYYYMMDD'),1,4) NOT BETWEEN '1900' AND '2004') OR
      (substr(to_char(start_date,'YYYYMMDD'),5,2) NOT BETWEEN '01' AND '12') OR
      (substr(to_char(start_date,'YYYYMMDD'),7,2) NOT BETWEEN '01' AND '31')如果能选出,然后再delete,该条件没有选出形如‘20041031’这样的错误,稍改下就可以

解决方案 »

  1.   

    delete from  table where to_char(start_date,'yyyymmdd')='20041159'
      

  2.   

    select start_date from tb where substr(start_date,1,6)||'01'>start_date or start_date>last_day(to_date(substr(start_date,1,6)||'01','yyyymmdd'))
      

  3.   

    前面的有点错select start_date from tb where substr(start_date,1,6)||'01'>start_date or start_date>to_char(last_day(to_date(substr(start_date,1,6)||'01','yyyymmdd')),'yyyymmdd');
      

  4.   

    select '20040230' from dual where substr('20040230',1,6)||'01'>'20040230' or '20040230'>to_char(last_day(to_date(substr('20040230',1,6)||'01','yyyymmdd')),'yyyymmdd');
    '2004023
    --------
    20040230说明已经查出‘20040230’是个无效的日期了