第一个语句:
select P_CERTNO FROM 表2 WHERE MONTHS_BETWEEN(TO_DATE('20080507','YYYYMMDD'),TO_DATE(P_LEFTTIME,'YY-MM-DD'))<3  AND P_LEFT='是'没有问题,可以正确执行第二个语句仅仅是在第一个语句后面加了  AND P_CERTNO IN(SELECT P_CERTNO FROM 表2)就报错,而且报奇怪的错误ORA-01841 年份值必须介于-4713和+9999之间且不为0我要疯了,救命

解决方案 »

  1.   

    错了,第二句是AND P_CERTNO IN(SELECT P_CERTNO FROM 表1)表1和表2不是同一个表 
      

  2.   

    第一个语句: 
    select P_CERTNO FROM 表2 WHERE MONTHS_BETWEEN(TO_DATE('20080507','YYYYMMDD'),TO_DATE(P_LEFTTIME,'YY-MM-DD')) <3  AND P_LEFT='是' 
    错了,第二句是AND P_CERTNO IN(SELECT P_CERTNO FROM 表1) 表1和表2不是同一个表 
    ------------------------
    语法没错.试试看:
    select P_CERTNO FROM 表2 WHERE P_CERTNO IN (SELECT P_CERTNO FROM 表1) 有没有问题?
      

  3.   

    第二句试试:
    and exists (SELECT P_CERTNO FROM 表1 where 表1.P_CERTNO = 表2.P_CERTNO) 
      

  4.   

    已解决,确实有不符合yy-mm-dd的数据记录
    而执行第一条sql的时候,toad只是select了一页数据,所以刚好没出错
    而第二句sql则select到错误数据导致报错