Oracle-查询以检索当年和上一年所有月份的月份的最后一天

时间:2020-10-02 14:02:09

标签: sql oracle datetime recursive-query

从1月19日到10月2020年,从本年1月19日到今年这一月要检索的每个月的最后一天是什么查询?

预期产量

Last Day 
--------
31-JAN-2019
28-FEB-2019
31-MAR-2019
...
31-JAN-2020
29-FEB-2020
31-MAR-2020

2 个答案:

答案 0 :(得分:0)

SQL> select last_day(add_months(date'2019-01-01',level-1)) dt from dual connect by level<=24;

DT
-------------------
2019-01-31 00:00:00
2019-02-28 00:00:00
2019-03-31 00:00:00
2019-04-30 00:00:00
2019-05-31 00:00:00
2019-06-30 00:00:00
2019-07-31 00:00:00
2019-08-31 00:00:00
2019-09-30 00:00:00
2019-10-31 00:00:00
2019-11-30 00:00:00
2019-12-31 00:00:00
2020-01-31 00:00:00
2020-02-29 00:00:00
2020-03-31 00:00:00
2020-04-30 00:00:00
2020-05-31 00:00:00
2020-06-30 00:00:00
2020-07-31 00:00:00
2020-08-31 00:00:00
2020-09-30 00:00:00
2020-10-31 00:00:00
2020-11-30 00:00:00
2020-12-31 00:00:00

答案 1 :(得分:0)

我喜欢为此使用标准的递归查询:

with cte (dt) as (
    select date '2019-01-01' dt from dual
    union all select add_months(dt, 1) from cte where dt < add_months(sysdate, -1)
)
select last_day(dt) dt from cte

这将生成从2019年1月到当前月(包括当月)的所有月末日期。

Demo on DB Fiddle