如何从 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 Barinstein...
借鉴您的方法,但引入了最近发布的两个有用的新功能。
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
我已经编写了以下代码,以从 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 Barinstein...
借鉴您的方法,但引入了最近发布的两个有用的新功能。
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