我有一条N张表关联的sql语句,其中where语句中有这么一个条件:
and a.date2<to_date(to_char(add_months(a.date1,-1),'yyyy-mm')||'-26','yyyy-mm-dd')
就报错ora-01841错误,去掉这个条件就不报错。
我将这个条件注释掉,取出该sql语句得到的所有a表的date1、date2,新建一张临时表,插入进去,然后执行如下语句:
select * from temp2 where date2<to_date(to_char(add_months(date1,-1),'yyyy-mm')||'-26','yyyy-mm-dd');
又不报错。真的不知道原因,请高人指点:这两个数据列如下:
2008-8-27 2008-8-25
2009-8-6 2009-7-31
2009-5-26 2009-5-25
2008-8-27 2008-8-25
2008-8-22 2008-8-18
2008-12-31 2008-12-26
2009-9-23 2009-8-25
2008-10-7 2008-9-27
2009-11-10 2009-11-6
2009-4-17 2009-4-15
2008-10-10 2008-10-7
2009-3-19 2009-3-17
2009-2-3 2009-2-3
2009-1-19 2009-1-7
2009-10-15 2009-10-13
2009-10-15 2009-10-13
2009-3-26 2009-3-25
2009-3-26 2009-3-25
2009-2-5 2009-2-4
2009-3-11 2009-3-6
2009-3-19 2009-3-16
2010-2-25 2010-2-23
2009-12-30 2009-12-24
2009-4-27 2009-4-21
2009-4-2 2009-3-31
2009-4-29 2009-4-7
2009-9-28 2009-9-25
2010-1-19 2010-1-15
2009-7-28 2009-7-24
2009-11-10 2009-11-5
2009-12-11 2009-12-9
2010-1-29 2010-1-27
2010-4-30 2010-4-29
2010-4-30 2010-4-28
2009-12-8 2009-12-3
2010-1-6 2010-1-5
2010-4-27 2010-4-23
2010-4-20 2010-4-15
2010-4-14 2010-4-12
2010-3-30 2010-3-23
2009-3-10 2009-3-6
2009-3-25 2009-3-23
2009-4-20 2009-4-17
2010-5-12 2010-5-10
2009-9-8 2009-9-4
2010-1-5 2009-12-29
2010-3-22 2010-3-18
2009-8-18 2009-8-13
2009-9-4 2009-9-1
2009-10-15 2009-10-10
2009-9-18 2009-9-14
2009-10-28 2009-10-21
2009-11-5 2009-11-2
2010-3-12 2010-3-10
2010-2-23 2010-2-20
2010-4-15 2010-4-13
2009-12-11 2009-12-9
2009-11-25 2009-11-18
2009-11-18 2009-11-13
2009-11-18 2009-11-13
2009-11-25 2009-11-20
2010-1-13 2010-1-8
2009-12-31 2009-12-25
2010-2-27 2010-2-25
2010-4-21 2010-4-19
2010-3-17 2010-3-12
2010-5-18 2010-5-15
2010-5-20 2010-5-19
2009-9-8 2009-9-4
2009-12-13 2009-12-10
2009-12-30 2009-12-25
2010-1-16 2010-1-8
2009-3-6 2009-3-3
2009-3-26 2009-3-25
2010-1-28 2010-1-26
2010-2-25 2010-2-23
2010-1-24 2010-1-14
2009-9-7 2009-9-3
2010-1-24 2010-1-14
2010-3-20 2010-3-17
2009-2-27 2009-2-25
2009-4-15 2009-4-3
2010-3-23 2010-3-19
2009-12-31 2009-12-30
2010-3-26 2010-3-23
2009-7-6 2009-7-2
2009-9-30 2009-9-29
2010-4-16 2010-4-7
2010-4-22 2010-4-21
2009-5-14 2009-5-13
2010-5-12 2010-5-11
2010-4-22 2010-4-19
2009-7-20 2009-7-15
2009-9-7 2009-9-3
2009-6-24 2009-6-22
2010-5-19 2010-5-14
2010-4-2 2010-3-30
2009-9-30 2009-9-28
2010-4-3 2010-4-1
2009-7-22 2009-7-20
2009-8-31 2009-8-25
2010-1-9 2010-1-5
2009-8-12 2009-8-5
2009-9-30 2009-9-28
2009-12-31 2009-12-28
2009-12-17 2009-12-8
2009-9-28 2009-9-24
2010-5-20 2010-5-18
2009-10-29 2009-10-14
2009-12-30 2009-12-28
2009-9-16 2009-9-15
2010-2-25 2010-2-24
2009-11-12 2009-11-9
2009-11-14 2009-11-11
2010-2-12 2010-2-5
2009-12-5 2009-12-3
2009-11-24 2009-11-19
2009-11-19 2009-11-12
2010-2-25 2010-2-21
2010-3-3 2010-3-1
2009-12-3 2009-11-26
2010-4-9 2010-4-2
2010-1-2 2009-12-21
2010-3-15 2010-3-11
2010-4-14 2010-4-13
2010-3-26 2010-3-25
2010-4-22 2010-4-19
2010-4-22 2010-4-19
2010-2-24 2010-2-3
2010-3-29 2010-3-23
2010-3-30 2010-3-26
2010-4-28 2010-4-26
2010-2-12 2010-2-11
2010-4-8 2010-4-2
2010-4-15 2010-4-12
2010-5-12 2010-5-11
2010-5-12 2010-5-11
2009-10-20 2009-10-19
2010-3-17 2010-3-15
2009-11-27 2009-11-24
2009-10-26 2009-10-23
2010-1-27 2010-1-22
2010-5-15 2010-5-14
2009-9-14 2009-9-10
2009-11-27 2009-11-25
2009-12-29 2009-12-25
2009-12-29 2009-12-25
2009-4-30 2009-4-25
2010-2-11 2010-2-8
2010-3-16 2010-3-15
2009-12-29 2009-12-25
2010-3-8 2010-3-3
2010-3-16 2010-3-12
2010-4-21 2010-4-19
2010-4-18 2010-4-16
2010-5-19 2010-5-14
2010-4-23 2010-4-22
2009-7-24 2009-7-24
2009-11-27 2009-11-25
2009-9-26 2009-9-21
2009-9-14 2009-9-7
2009-11-26 2009-11-25
2009-12-4 2009-11-30
2009-12-14 2009-12-10
2009-12-16 2009-12-14
2009-12-16 2009-12-10
2009-12-25 2009-12-24
2009-12-24 2009-12-22
2010-1-25 2010-1-22
2010-2-3 2010-1-29
2010-5-10 2010-5-7
2010-4-23 2010-4-14
2009-12-17 2009-12-16
2010-1-21 2010-1-19

解决方案 »

  1.   

    1、写法没问题,但写得太复杂,求指定日期的上个月26日可用
    trunc(add_months(sysdate,-1),'mm')+25 
    2、把错误贴出来
      

  2.   

    select * from a 
    where a.date2<to_date(to_char(add_months(a.date1,-1),'yyyy-mm')||'-26','yyyy-mm-dd')
    单独查询该表呢,是否报错?如果不报错,就是你多表关联的有问题导致的
      

  3.   

    谢谢tangren,改为这个简单一点的写法果然可以了。但是很疑惑为什么我那种就报错了,难道是pl/sql的bug?
      

  4.   

    语法没错
    不过最好还是把代码全贴出来 
    bug这东西不可能的
      1* select to_date(to_char(add_months(sysdate,-1),'yyyy-mm')||'-26' ,'yyyy-mm-dd') from dual
    SQL> /TO_DATE(TO_CHA
    --------------
    26-5月 -10