月份和年份的 SQL 查询
Posted
技术标签:
【中文标题】月份和年份的 SQL 查询【英文标题】:SQL query for Month and Year 【发布时间】:2020-12-10 11:45:53 【问题描述】:查找 Oracle SQL 查询以显示从当前年份 - 1y 和当前年份 +1y 开始的月份和年份。 例如:2019 年 12 月、2020 年 1 月、2020 年 2 月、...... 2021 年 12 月
【问题讨论】:
您真的想要 PL/SQL 还是 Oracle SQL 就足够了? Oracle SQL 就够了 。 .在那种情况下,我喜欢我的回答。 【参考方案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;
【讨论】:
以上是关于月份和年份的 SQL 查询的主要内容,如果未能解决你的问题,请参考以下文章