Calendar 一个月的最后一天 Oracle

Calendar Last day of Month Oracle

我需要在 Oracle 中创建一个日历,其中两个日期之间只有一个月的最后几天。

我尝试这样做,但它会创建一个包含两个日期之间所有日期的日历,而我只需要该月的最后一天。

begin
  begin_date := TO_NUMBER(TO_CHAR(TO_DATE('2021-01-01', 'yyyy-MM-dd'), 'j'));
  end_date := TO_NUMBER(TO_CHAR(ADD_MONTHS(LAST_DAY(TO_DATE(sysdate, 'yyyy-MM-dd')),-1), 'j'));
  WITH calendar AS (
   SELECT to_date(begin_date, 'mm/dd/yyyy') + ROWNUM - 1 c_date
     FROM dual
    CONNECT BY LEVEL <= to_date(end_date, 'mm/dd/yyyy') 
                        - to_date(begin_date, 'mm/dd/yyyy') + 1
)
SELECT c_date "date", ID 
  FROM (SELECT c.c_date, EXPE.ID AS ID
           FROM EXPEDIENTE EXPE, calendar c
           WHERE EXPE.ID=1)
ORDER BY 1,2;

我该怎么做?

不需要PL/SQL。

SQL> alter session set nls_date_format = 'dd.mm.yyyy';

Session altered.

SQL> with
  2  period as
  3    (select date '2020-11-07' start_date,
  4            date '2021-04-15' end_date
  5     from dual
  6    )
  7  select last_day(add_months(start_date, level - 1)) mon
  8  from period
  9  connect by level <= months_between(end_date, start_date) + 1
 10  order by mon;

MON
----------
30.11.2020
31.12.2020
31.01.2021
28.02.2021
31.03.2021
30.04.2021

6 rows selected.

SQL>