SQL查询通过输入年份获取到目前为止的月份列表

时间:2016-09-19 10:33:35

标签: sql sql-server

我有一个要求,即在输入年份参数时,我必须显示今年的所有月份。

例如,如果我输入2016,则应显示截至9月的所有月份。

如何实现这一目标?任何想法都将受到高度赞赏。

2 个答案:

答案 0 :(得分:2)

使用递归CTE很容易:

with m as (
      select datefromparts(year(getdate()), 1, 1) as mm
      union all
      select dateadd(month, 1, m.mm)
      from m
      where m.mm < getdate()
     )
select m.*
from mm;

我不清楚该参数的用途。这可以从今年开始。

答案 1 :(得分:1)

使用以下脚本。

;with months (date)
AS
(
    SELECT cast(@year+'-01-01' as date)
    UNION ALL
    SELECT DATEADD(month,1,date)
    from months
    where  DATEADD(month,1,date)<= case when @year=YEAR(getdate()) THEN CAST(getdate() as date) ELSE cast(@year+'-12-31' as date) END
)
select Datename(month,date) [Month] from months

输出

enter image description here