如果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.   

    写一个存储过程,
    c_date date;
    c_rowid varchar2(50);
    c_startdate  char(5);select rowid,start_date into c_rowid,c_startdate from table where rowid=intputrowid;
    c_date = to_date(start_date,'yyyymmdd');
    outputrowid:='0';
    exception
      outputrowid:=intputrowid;
    没有写完全.
    只要输入参数是inputrowid,输出参数是outputrowid
    如果inputrowid不等于'0'就删除该记录循环调用次过程应该可以.
    然后在错误
      

  3.   

    select rowid,start_date into c_rowid,c_startdate from table where rowid=intputrowid;
    那不是要个大的游标吗,数据量可能是百万级的,不实际啊?