Oracle查询指定时间区间内的月份

1.查询今年以来的月份

SQL如下:

Select To_number(To_char(Add_months(Trunc(sysdate, 'yy'),Rownum - 1),'MM')) As month 
From Dual 
Connect By Rownum <= (
        Select Months_between(Trunc(sysdate, 'mm'),
               Trunc(sysdate, 'yy'))+1
        From Dual
) 

结果:

 

2.查询指定时间区间内( 20230117 - 20230817 )的每个月末

SQL如下:

Select Rownum,To_char(Add_months(Last_day(To_date(20230117,'yyyy-mm-dd')),Rownum - 1),'yyyymmdd') As monEnd 
From Dual 
Connect By Rownum <= (
        Select Months_between(To_date(20230817,'yyyy-mm-dd'),
               To_date(20230117,'yyyy-mm-dd'))+1
        From Dual
) 

结果:

 

3.查询指定时间区间内的每个月末并转化为区间

SQL如下:

With time_temp As(
  Select Add_months(To_date(20230117,'yyyy-mm-dd'),- 2) As begindate,
         To_date(20230817,'yyyy-mm-dd') As enddate
  From Dual
)
,time_month As(
  Select Rownum As rn,To_char(Add_months(Last_day((Select begindate From time_temp)),Rownum - 1),'yyyymmdd') As monEnd 
  From Dual 
  Connect By Rownum <= (
        Select Months_between((Select enddate From time_temp),
               (Select begindate From time_temp))+1
        From Dual
  )   
)
Select a.monend As begindate,b.monend As enddate
From time_month a
Inner Join time_month b On b.rn = a.rn+1

结果:

实际工作里,要求每个月末的数据与上个月末进行对比,考虑到 月末不一定有数据,所以需将每个月转换为时间段,然后查找该时间段内的最后一条数据即可。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值