我编写了以下代码,以使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
答案 0 :(得分:1)
尝试一下:
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|
答案 1 :(得分:0)
一个不错的@Mark Barinstein ...
随心所欲,但要引入最新版本中的两个新有用功能。
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