【发布时间】:2020-03-20 19:40:03
【问题描述】:
我是 Oracle SQL 的新手。我知道 LAST_DAY 函数将在给定特定日期的情况下返回该月的最后一天。但是我怎样才能得到过去两年中每个月的最后一天呢?非常感谢!
【问题讨论】:
我是 Oracle SQL 的新手。我知道 LAST_DAY 函数将在给定特定日期的情况下返回该月的最后一天。但是我怎样才能得到过去两年中每个月的最后一天呢?非常感谢!
【问题讨论】:
从给定日期到今天的每个月的第一个和最后一个日期。
DEFINE start_date=TO_DATE('01.01.2020','DD.MM.YYYY');
SELECT
ADD_MONTHS(&start_date,LEVEL-1) first_day_in_month,
ADD_MONTHS(&start_date,LEVEL)-1 last_day_in_month
FROM DUAL CONNECT BY LEVEL <= FLOOR(MONTHS_BETWEEN(SYSDATE,&start_date));
【讨论】:
给你:
WITH cteTwo_years_ago AS (SELECT TRUNC(SYSDATE - INTERVAL '2' YEAR, 'MONTH') AS TWO_YEARS_AGO
FROM DUAL),
cteMonth_intervals AS (SELECT INTERVAL '1' MONTH * (LEVEL-1) AS SEQ
FROM DUAL
CONNECT BY LEVEL-1 < 24),
cteDates AS (SELECT TWO_YEARS_AGO + SEQ AS MONTH_START
FROM cteTwo_years_ago
CROSS JOIN cteMonth_intervals)
SELECT LAST_DAY(MONTH_START)
FROM cteDates
【讨论】:
SELECT TRUNC (ADD_MONTHS (SYSDATE, -(LEVEL - 1)), 'MM') FIRST_DAY,
LAST_DAY (ADD_MONTHS (SYSDATE, -(LEVEL - 1))) LAST_DAY
FROM DUAL
CONNECT BY LEVEL <= 24;
【讨论】: