【问题标题】:Get the last day of each month in the last two years using oracle SQL使用oracle SQL获取最近两年每个月的最后一天
【发布时间】:2020-03-20 19:40:03
【问题描述】:

我是 Oracle SQL 的新手。我知道 LAST_DAY 函数将在给定特定日期的情况下返回该月的最后一天。但是我怎样才能得到过去两年中每个月的最后一天呢?非常感谢!

【问题讨论】:

    标签: sql oracle


    【解决方案1】:

    从给定日期到今天的每个月的第一个和最后一个日期。

    DEFINE start_date=TO_DATE('01.01.2020','DD.MM.YYYY');
    SELECT
        ADD_MONTHS(&start_date,LEVEL-1) first_day_in_month,
        ADD_MONTHS(&start_date,LEVEL)-1 last_day_in_month
    FROM DUAL CONNECT BY LEVEL <= FLOOR(MONTHS_BETWEEN(SYSDATE,&start_date));
    

    【讨论】:

      【解决方案2】:

      给你:

      WITH cteTwo_years_ago AS (SELECT TRUNC(SYSDATE - INTERVAL '2' YEAR, 'MONTH') AS TWO_YEARS_AGO
                                  FROM DUAL),
           cteMonth_intervals AS (SELECT INTERVAL '1' MONTH * (LEVEL-1) AS SEQ
                                    FROM DUAL
                                    CONNECT BY LEVEL-1 < 24),
           cteDates AS (SELECT TWO_YEARS_AGO + SEQ AS MONTH_START
                          FROM cteTwo_years_ago
                          CROSS JOIN cteMonth_intervals)
      SELECT LAST_DAY(MONTH_START)
        FROM cteDates
      

      【讨论】:

        【解决方案3】:
        SELECT   TRUNC (ADD_MONTHS (SYSDATE, -(LEVEL - 1)), 'MM') FIRST_DAY,
                     LAST_DAY (ADD_MONTHS (SYSDATE, -(LEVEL - 1))) LAST_DAY
              FROM   DUAL
        CONNECT BY   LEVEL <= 24;
        

        【讨论】:

        • 如果这回答了您的问题,那么请标记它已接受。我认为 With Clause 查询更复杂..因此我编写了简单的查询
        猜你喜欢
        • 1970-01-01
        • 2011-12-17
        • 1970-01-01
        • 1970-01-01
        • 2012-01-10
        • 1970-01-01
        • 2022-07-22
        • 1970-01-01
        相关资源
        最近更新 更多