如何从 IBM DB2 中的当前日期获取过去 4 年每个月的第一天和最后一天?

how to get first and last day of each month for past 4 years from current date in IBM DB2?

我已经编写了以下代码,以从 db2 中的当前日期开始计算过去 4 年的每个月的第一天和月末日期。

WITH tempdateseries (StartDate,EndDate) AS (
SELECT
    DATE(1) + (YEAR(CURRENT DATE)-5) YEARS AS StartDate,
    LAST_DAY(CURRENT DATE - 4 YEARS) AS EndDate
FROM
    sysibm.sysdummy1
UNION ALL
SELECT
    StartDate + 1 MONTH,
    EndDate
FROM
    tempdateseries
WHERE
    StartDate < LAST_DAY(CURRENT DATE - 1 MONTHS)
    AND EndDate < LAST_DAY(CURRENT DATE - 1 MONTHS)) 
    SELECT
    *
FROM
    tempdateseries

试试这个:

WITH T (STARTDATE) AS 
(
VALUES CURRENT DATE - (DAY(CURRENT DATE) - 1) DAY
  UNION ALL
SELECT STARTDATE - 1 MONTH
FROM T
WHERE CURRENT DATE < STARTDATE - 1 MONTH + 4 YEAR
)
SELECT STARTDATE, STARTDATE + 1 MONTH - 1 DAY ENDDATE
FROM T
ORDER BY STARTDATE DESC
FETCH FIRST 5 ROWS ONLY;

结果是:

|STARTDATE |ENDDATE   |
|----------|----------|
|2020-05-01|2020-05-31|
|2020-04-01|2020-04-30|
|2020-03-01|2020-03-31|
|2020-02-01|2020-02-29|
|2020-01-01|2020-01-31|

不错的@Mark Ba​​rinstein...

借鉴您的方法,但引入了最近发布的两个有用的新功能。

DATE_TRUNC and LAST_DAY

WITH T (STARTDATE) AS  
( 
VALUES DATE(DATE_TRUNC('MONTH', CURRENT DATE ) )
  UNION ALL 
SELECT STARTDATE - 1 MONTH 
FROM T 
WHERE CURRENT DATE < STARTDATE - 1 MONTH + 4 YEAR 
) 
SELECT STARTDATE, LAST_DAY(STARTDATE) ENDDATE 
FROM T 
ORDER BY STARTDATE DESC 
FETCH FIRST 5 ROWS ONLY