【问题标题】:how to get first and last day of each month for past 4 years from current date in IBM DB2?如何从 IBM DB2 中的当前日期获取过去 4 年中每个月的第一天和最后一天?
【发布时间】:2020-05-28 14:09:31
【问题描述】:

我编写了以下代码来获取从 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

【问题讨论】:

    标签: database db2 db2-400


    【解决方案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|
    

    【讨论】:

      【解决方案2】:

      不错的@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
      

      【讨论】:

      • 问题被标记为 [db2-400]。这意味着使用了 DB2 for IBM i。但是没有像最近的 Db2 for LUW 版本那样的 DATE_TRUNCFIRST_DAY 函数。仅限LAST_DAY。我的解决方案适用于所有 3 个 DB2 平台。
      • 嗨@mar​​k,我没有注意到 db2-400 标签。是的,您的版本无处不在。我无意窃取它,只是通过使用通常大多数人没有意识到它们存在的更新功能来提供与您相同的功能。我已在 v11.1 文档中提供了这两个函数的 URL。它们用于 Db2-LUW。我发布它的目的只是为了丰富有关他的问题的内容,因为添加的新功能完全符合他的要求。没有别的了。
      猜你喜欢
      • 1970-01-01
      • 2015-07-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-03-22
      • 2019-03-04
      相关资源
      最近更新 更多