oracle sql语句中to_date函数报错问题

liukaka2012 2016-07-29 01:53:49
各位大神,我的一个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语句筛过的数据了,这种情况该怎么解决?感谢各位!
...全文
954 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
卖水果的net 2016-07-29
  • 打赏
  • 举报
回复
具体什么错误呢? 你的源数据又是什么样的呢?
parkjoon 2016-07-29
  • 打赏
  • 举报
回复
请楼主提供: AAE225 AAE226 以上两列的字符类型和具体数据(举例即可)
parkjoon 2016-07-29
  • 打赏
  • 举报
回复
楼主把 不加xx>6的结果贴出来一部分看看
ghx287524027 2016-07-29
  • 打赏
  • 举报
回复
引用 3 楼 liukaka2012 的回复:
[quote=引用 2 楼 ghx287524027 的回复:] [quote=引用 1 楼 ghx287524027 的回复:] 啥意思?没太明白~ sql语句的执行顺序是先select 得到结果集1,然后根据where条件筛选结果集1得到结果集2
不对,这个说错了。。。。。你先说说你具体啥意思吧~[/quote] 就是单独执行select * 里面的没问题,外面套上一层并且加上xx>6条件后报错,报了里面to_date的错误,日期格式不对。[/quote] 又是这么一个奇葩的问题加我q吧( 212646490 ),详细唠唠……
liukaka2012 2016-07-29
  • 打赏
  • 举报
回复
引用 2 楼 ghx287524027 的回复:
[quote=引用 1 楼 ghx287524027 的回复:] 啥意思?没太明白~ sql语句的执行顺序是先select 得到结果集1,然后根据where条件筛选结果集1得到结果集2
不对,这个说错了。。。。。你先说说你具体啥意思吧~[/quote] 就是单独执行select * 里面的没问题,外面套上一层并且加上xx>6条件后报错,报了里面to_date的错误,日期格式不对。
ghx287524027 2016-07-29
  • 打赏
  • 举报
回复
引用 1 楼 ghx287524027 的回复:
啥意思?没太明白~ sql语句的执行顺序是先select 得到结果集1,然后根据where条件筛选结果集1得到结果集2
不对,这个说错了。。。。。你先说说你具体啥意思吧~
ghx287524027 2016-07-29
  • 打赏
  • 举报
回复
啥意思?没太明白~ sql语句的执行顺序是先select 得到结果集1,然后根据where条件筛选结果集1得到结果集2

17,086

社区成员

发帖
与我相关
我的任务
社区描述
Oracle开发相关技术讨论
社区管理员
  • 开发
  • Lucifer三思而后行
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧