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

时间:2020-05-28 14:09:31

标签: database db2 db2-400

我编写了以下代码,以使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

2 个答案:

答案 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 Ba​​rinstein ...

随心所欲,但要引入最新版本中的两个新有用功能。

DATE_TRUNCLAST_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
相关问题