【问题标题】:SQL query for Month and Year月份和年份的 SQL 查询
【发布时间】:2020-12-10 11:45:53
【问题描述】:

查找 Oracle SQL 查询以显示从当前年份 - 1y 和当前年份 +1y 开始的月份和年份。 例如:2019 年 12 月、2020 年 1 月、2020 年 2 月、...... 2021 年 12 月

【问题讨论】:

  • 您真的想要 PL/SQL 还是 Oracle SQL 就足够了?
  • Oracle SQL 就够了
  • 。 .在那种情况下,我喜欢我的回答。

标签: sql oracle


【解决方案1】:

您可以按如下方式使用层次结构查询:

SQL> SELECT trunc(ADD_MONTHS(ADD_MONTHS(sysdate,-12), LEVEL-1), 'Mon') as  month_year
  2    FROM DUAL CONNECT BY LEVEL <= 24 + 1;

MONTH_YEAR
--------------
December  2019
January   2020
February  2020
March     2020
April     2020
May       2020
June      2020
July      2020
August    2020
September 2020
October   2020
November  2020
December  2020
January   2021
February  2021
March     2021
April     2021
May       2021
June      2021
July      2021
August    2021
September 2021
October   2021
November  2021
December  2021

25 rows selected.

SQL>

【讨论】:

  • 谢谢...位已修改-> SELECT to_char(trunc(ADD_MONTHS(ADD_MONTHS(sysdate,-12), LEVEL-1), 'Mon'),'MONTH yyyy') as month_year FROM按级别进行双重连接
【解决方案2】:

有多种方法可以做到这一点。我认为像这样的简单示例是了解递归 CTE 的好机会:

with dates(yyyymm, n) as (
      select trunc(sysdate, 'Mon') as yyyymm, 1 as n
      from dual
      union all
      select add_months(yyyymm, -1), n + 1
      from dates
      where n <= 12
     )
select yyyymm
from dates;

【讨论】:

    【解决方案3】:
    WITH d AS (
        SELECT
            'JAN' m,
            2021 y
        FROM
            dual
    ), d1 AS (
        SELECT
            to_date(m || y, 'MONYYYY') first_day,
            last_day(to_date(m || y, 'MONYYYY')) last_day1,
            last_day(to_date(m || y, 'MONYYYY')) - to_date(m || y, 'MONYYYY') no_of_days
        FROM
            d
    )
    SELECT
        level - 1 + first_day dates
    FROM
        d1
    CONNECT BY
        level <= no_of_days + 1;
    

    【讨论】:

      猜你喜欢
      • 2017-01-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-08-26
      相关资源
      最近更新 更多