首页新闻找找看学习计划

如何在ORACLE数据库中查出几年内春节、清明、五一、国庆的数据,这个SQL要怎么写?

0
[已解决问题] 解决于 2016-11-21 19:17

如何在ORACLE数据库中查出几年内春节、清明、五一、国庆的数据,这个SQL要怎么写?

问题补充:

 

比如数据库表里2011--2015年每年每天的数据都有,数据格式为“2015-10-01 00:00:00”、“2015-10-02 00:00:00”,根据这些日期过滤出每年的“春节”、“清明”、“五一”、“国庆”的数据,具体的sql语句该怎么写?

神跳跳的主页 神跳跳 | 菜鸟二级 | 园豆:202
提问于:2016-11-16 17:22
< >
分享
最佳答案
1

select c.jieri,count(0) from (select a.* ,'春节' as jieri from tablea a where a.time> to_date('2015-10-01 00:00:00','YYYY-MM-DD hh24:mi:ss')  and a.time< to_date('2015-10-02 00:00:00','YYYY-MM-DD hh24:mi:ss') union

select b.* ,'五一' as jieri from tablea a where b.time> to_date('2015-05-01 00:00:00','YYYY-MM-DD hh24:mi:ss')  and b.time< to_date('2015-05-02 00:00:00','YYYY-MM-DD hh24:mi:ss')

) c group by c.jieri

奖励园豆:5
ensleep | 小虾三级 |园豆:1391 | 2016-11-16 20:12

感谢回答!

这样写怕是不合适。因为我要把连续几年节日的数据都取出来,时间判断上写死的话那就每年都要写好几个判断,整个sql太长。

神跳跳 | 园豆:202 (菜鸟二级) | 2016-11-16 20:21

@神跳跳: 这样写最工整,以后最容易修改,用空间换可维护性是值得的。或者你用:

SELECT B.JIERI,COUNT(0) FROM (SELECT CASE WHEN (a.time> to_date('2015-10-01 00:00:00','YYYY-MM-DD hh24:mi:ss')  and a.time< to_date('2015-10-02 00:00:00','YYYY-MM-DD hh24:mi:ss')) THEN '国庆' WHEN  (a.time> to_date('2015-05-01 00:00:00','YYYY-MM-DD hh24:mi:ss')  and a.time< to_date('2015-05-02 00:00:00','YYYY-MM-DD hh24:mi:ss')) THEN '国庆 ELSE NULL END AS JIERI FROM TABLEA A

)  B GROUP BY B.JIERI

 

但是,这样的SQL维护起来太有问题了,一旦改错了,别人节日也查不到了。

ensleep | 园豆:1391 (小虾三级) | 2016-11-17 16:16
其他回答(2)
1

像我这样连除夕都能过错的人,针对这种问题最好的办法就是把他们全部记到db中,又没几个,五一国庆就不用说了,剩下的就算记100年的又能有几条记录?

另一种方式用网上那种给人感觉像阴阳八卦样的算每年的每个阴历节日翻译下估计也能凑合着用。

Daniel Cai | 园豆:10374 (专家六级) | 2016-11-16 17:44

感谢回答!数据库表是这样的:

2011--2015年每年每天的数据都有,数据格式为“2015-10-01 00:00:00”、“2015-10-02 00:00:00”,根据这些日期过滤出每年的“春节”、“清明”、“五一”、“国庆”的数据,具体的sql语句该怎么写?

支持(0) 反对(0) 神跳跳 | 园豆:202 (菜鸟二级) | 2016-11-16 20:04

@神跳跳: 说了啊,额外建一张表,记录阴历的这些节日,这样就不用算了,只用join就可以完成了。

支持(0) 反对(0) Daniel Cai | 园豆:10374 (专家六级) | 2016-11-17 09:31
1

等你问完看完答案,你都可以把这几年的春节列出来然后写到db了。

c99 | 园豆:1832 (小虾三级) | 2016-11-17 13:25
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册