Oracle SQL使用connect by生成今天到指定时间的连续日期

Oracle实现方法

select sysdate + rownum-1
    from dual
   connect by rownum <= to_date('2029-04-01','yyyy-mm-dd')-to_date(to_char(sysdate,'yyyy-mm-dd'),'yyyy-mm-dd')

结果:

Oracle SQL使用connect by生成今天到指定时间的连续日期_第1张图片

实现思路:使用日期相减来获取指定指定时间段之内的天数,(切记不能使用字符串相减这样会获得一个无法预计的数据导致计算出来的日期不是想要的值)然后使用connect by函数将数值传入rownum中放入上边的select查询中来得出具体的日期。

20220303前来补充:在此处之前一直有疑惑为什么要+1今天再写时间维表的时候分析了一下。如果不+1他的开始是以1 - rownum的一个序列,所以当sysdate+1的时候会生成一明天为开始的日期维表如下

Oracle SQL使用connect by生成今天到指定时间的连续日期_第2张图片

 同理如果是rownum+1那么取到的数据序列就是2 - rownum+1所以测试一下

 Oracle SQL使用connect by生成今天到指定时间的连续日期_第3张图片

 所以我们在要取的从今天开始的时间序列那么rownum之后应该减一,即生成从0 - rownum-1的序列。

后边有其他的理解再来补充

以下为引用其他的博文中的日期计算格式原文链接Oracle日期函数和转换函数_程序羊的博客-CSDN博客_oracle日期格式转换
日期函数用于处理date类型的数据,两个日期相减返回日期之间相差的天数。日期不允许做加法运算,无意义。
常见代表符号:yyyy 年,mm 月,dd 日,hh 小时,mi 分钟,ss 秒,day 星期
默认情况下日期格式是dd-mon-yy即12-3月-19
(1)sysdate: 该函数返回系统时间
(2)months_between(m,n)日期m和日期n相差多少月数
(3)add_months(d,n)在日期d上增加n个月数
(4)next_day(d, ‘星期*’) 指定日期d下一个星期*对应的日期
(5)last_day(d):返回指定日期d所在月份的最后一天
(6)extract(month from d)从日期d上提取月份数
(7)round(d,time)日期的四舍五入
(8)trunc(d,time)日期的截断

 

你可能感兴趣的:(SQL,oracle,sql,数据库)