oracle中日期循环

简介: oracle中日期循环

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

1、查询1到30的序列

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

select  level lv from dual connect by level <= 365

结果如下图:

image.png

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

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

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

结果如下图:

image.png

3、查询当天是星期几

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

select to_char(sysdate,'day') from dual

结果如下图:

image.png

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

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

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

结果如下图:

image.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

结果如下图:

image.png

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

目录
相关文章
|
21天前
|
SQL Oracle 关系型数据库
Oracle之日期计算相关函数
Oracle之日期计算相关函数
51 0
|
Oracle 关系型数据库
Oracle 计算两个日期间隔的天数、月数和年数
在Oracle中计算两个日期间隔的天数、月数和年数: 一、天数: 在Oracle中,两个日期直接相减,便可以得到天数; 1 select to_date('08/06/2015','mm/dd/yyyy')-to_date('07/01/2015','mm/dd/yyyy') from dual;返回结果:36 二、月数: 计算月数,需要用到months_between函数; 1 --months_between(date1,date2) 2 --如果两个日期中“日”相同,或分别是所在月的最后一天,那么返回的结果是整数。
3720 0
|
11月前
|
SQL 存储 Oracle
Oracle数据库中日期的操作、主键自增与分页查询
Oracle数据库中日期的操作、主键自增与分页查询
84 0
|
21天前
|
存储 SQL Oracle
|
10月前
|
Oracle 关系型数据库 数据库
Oracle 数据库中常见的日期和时间函数
Oracle 数据库中常见的日期和时间函数
149 0
|
10月前
|
Oracle 关系型数据库
Oracle日期加减运算实战演练
Oracle日期加减运算实战演练
67 0
|
Oracle 关系型数据库 数据库
Oracle查询优化-07日期运算
Oracle查询优化-07日期运算
93 0
Zp
|
SQL Oracle 关系型数据库
Oracle 通过sql to_date()和 to_char() 转化日期格式
Oracle 通过sql to_date()和 to_char() 转化日期格式
Zp
396 0
Oracle 通过sql to_date()和 to_char() 转化日期格式
Zp
|
Oracle 关系型数据库
oracle 获取指定日期的第一天和最后一天和上个月的第一天和最后一天及当年第一天和当年最后一天
oracle 获取指定日期的第一天和最后一天和上个月的第一天和最后一天及当年第一天和当年最后一天
Zp
196 0
|
SQL Oracle 关系型数据库
sql中datetime日期类型字段比较(mysql&oracle)
sql中datetime日期类型字段比较(mysql&oracle)
249 1