各位大神,我的一个sql语句报错,语句如下:
SELECT *
  FROM (SELECT D.AAC999,
               D.AAC003,
               D.AAC147,
               D.AAC009,
               B.AAE140,
               B.AAC066,
               E.AAA119,
               F.AAB999,
               F.AAB004,
               G.CAE249,
               G.AAE217,
               A.AAA121,
               A.AAE225 CAE179,
               A.AAE226 CAE180,
               NULL CAE181,
               NULL CAE182,
               B.AAA027,
               B.AAB301,
               CASE
                 WHEN LENGTH(A.AAE225) = 6 AND LENGTH(A.AAE226) = 6 THEN
                  MONTHS_BETWEEN(TO_DATE(A.AAE226, 'yyyymm'),
                                 TO_DATE(A.AAE225, 'yyyymm'))
                 WHEN LENGTH(A.AAE225) = 4 AND LENGTH(A.AAE226) = 4 THEN
                  MONTHS_BETWEEN(TO_DATE(A.AAE226, 'yyyy'),
                                 TO_DATE(A.AAE225, 'yyyy'))
               END XX
          FROM AC40 A, AC42 B, TC95 C, AC01 D, AC50 E, AB01 F, AE02 G
         WHERE A.AAZ192 = B.AAZ192
           AND A.AAC001 = C.AAC001
           AND A.AAC001 = D.AAC001
           AND A.AAC001 = E.AAC001
           AND B.AAB001 = F.AAB001
           AND A.AAZ002 = G.AAZ002
           AND E.AAE100 = '1'
           AND E.AAE140 = B.AAE140
           AND A.AAE100 = '1'
           AND B.AAE100 = '1'
           AND B.AAE017 = '0'
           AND B.AAA115 IN ('20', '21', '26', '2C')
           AND B.AAE002 >= SUBSTR(201606, 1, 6)
           AND B.AAE002 <= SUBSTR(201606, 1, 6)
         GROUP BY D.AAC999,
                  D.AAC003,
                  D.AAC147,
                  D.AAC009,
                  B.AAE140,
                  B.AAC066,
                  E.AAA119,
                  F.AAB999,
                  F.AAB004,
                  G.CAE249,
                  G.AAE217,
                  A.AAA121,
                  A.AAE225,
                  A.AAE226,
                  B.AAA027,
                  B.AAB301)
 WHERE XX > 6;原因是表中to_date的两个日期字段表中的数据有异常数据,但是现在的问题是to_date函数全表扫描了,而不是处理where语句筛过的数据了,这种情况该怎么解决?感谢各位!

解决方案 »

  1.   

    啥意思?没太明白~
    sql语句的执行顺序是先select 得到结果集1,然后根据where条件筛选结果集1得到结果集2
      

  2.   

    不对,这个说错了。。你先说说你具体啥意思吧~
    就是单独执行select * 里面的没问题,外面套上一层并且加上xx>6条件后报错,报了里面to_date的错误,日期格式不对。
      

  3.   

    不对,这个说错了。。你先说说你具体啥意思吧~
    就是单独执行select * 里面的没问题,外面套上一层并且加上xx>6条件后报错,报了里面to_date的错误,日期格式不对。
    又是这么一个奇葩的问题加我q吧( 212646490 ),详细唠唠……
      

  4.   

    楼主把 不加xx>6的结果贴出来一部分看看
      

  5.   

    请楼主提供:
    AAE225
    AAE226
    以上两列的字符类型和具体数据(举例即可)