工作时遇到一个问题,想要将本年度所有的日期(yyyy-mm-dd)和星期一一对应的查出来,经过不断尝试之后,终于成功,现在来总结一下。
1、查询1到30的序列
先考虑使用connect by关键字来解决循环年度内所有日期的问题,于是先写了个SQL试验一下connect by关键字的作用。
select level lv from dual connect by level <= 365
结果如下图:
2、查询2022年1月的日期,格式为:yyyy-mm-dd
随后开始加入日期计算,然后再进行遍历,最后得到一个日期的结果集。
select to_date('2021-12-31','yyyy-mm-dd')+level from dual connect by level <= 31
结果如下图:
3、查询当天是星期几
得到所有的日期结果集后,随后需要判断日期是星期几,这里我用到了下面的sql语法。很成功。
select to_char(sysdate,'day') from dual
结果如下图:
4、查询当天日期,格式:yyyy-mm-dd和当天是星期几
随后再次加入当天日期字段,得到当天的日期和当天的星期几结果集。
select to_char(sysdate,'yyyy-mm-dd'),to_char(sysdate,'day') from dual
结果如下图:
5、查询2022年1月份的日期,格式:yyyy-mm-dd和对应的星期
把所有的问题解决完毕后,接下来就是将所有使用的语法进行一个合并,最后就可以得到下面的这个非常正确的结果集了。
select to_char(to_date('2021-12-31', 'yyyy-mm-dd') + level, 'yyyy-mm-dd'), to_char(to_date('2021-12-31', 'yyyy-mm-dd') + level, 'day') from dual connect by level <= 31
结果如下图:
相关SQL已正常运行过,不存在无法执行的问题。