oracle中日期循环

427 阅读2分钟

这是我参与11月更文挑战的第1天,活动详情查看:2021最后一次更文挑战

工作时遇到一个问题,想要将本年度所有的日期(yyyy-mm-dd)和星期一一对应的查出来,经过不断尝试之后,终于成功,现在来总结一下。

1、查询1到30的序列

先考虑使用connect by关键字来解决循环年度内所有日期的问题,于是先写了个SQL试验一下connect by关键字的作用。

select  level lv from dual connect by level <= 365

结果如下图:

图片.png

2、查询2022年1月的日期,格式为:yyyy-mm-dd

随后开始加入日期计算,然后再进行遍历,最后得到一个日期的结果集。

select to_date('2021-12-31','yyyy-mm-dd')+level from dual connect by level <= 31

结果如下图:

图片.png

3、查询当天是星期几

得到所有的日期结果集后,随后需要判断日期是星期几,这里我用到了下面的sql语法。很成功。

select to_char(sysdate,'day') from dual

结果如下图:

图片.png

4、查询当天日期,格式:yyyy-mm-dd和当天是星期几

随后再次加入当天日期字段,得到当天的日期和当天的星期几结果集。

select to_char(sysdate,'yyyy-mm-dd'),to_char(sysdate,'day') from dual

结果如下图:

图片.png

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

结果如下图:

图片.png

相关SQL已正常运行过,不存在无法执行的问题。