使用递归CTE获取给定月份和月份之间逗号分隔的月份使用递归CTE
问题描述:
我们有要求提供2个月和2年作为输入的要求。结果应该提供从月份到月份之间所有月份的逗号分隔的月份。使用递归CTE获取给定月份和月份之间逗号分隔的月份使用递归CTE
说,我们
From Month is 'Jan'
From Year is 2011
To Month is 'Apr'
To Year is 2011
所需的输出
Jan'11,Feb'11,Mar'11,Apr'11
可以这样使用递归CTE来实现?我们需要使用递归CTE来实现这一点。有人能帮我解决这个问题吗?
答
试试这个代码:
--declaration of variables
declare @frommonth char(3) = 'jan',@fromyear char(4) = 2011,
@tomonth char(3) = 'APR', @toyear char(4) = 2011
declare @output varchar(max)
declare @f int, @t int
select --setting from and to month as months after 1900-01-01
@f = datediff(month, 0, cast('1' [email protected][email protected] as datetime)),
@t = datediff(month, 0, cast('1' [email protected][email protected] as datetime))
-- recusive loop
;with cte as
(
select @f m
union all
select m + 1 from cte
where m < @t
)
select @output = coalesce(@output +',', '') +stuff(convert(varchar(11),dateadd(mm, m, 0), 109), 4, 6, '''') FROM CTE
select @output
结果:
Jan'11,Feb'11,Mar'11,Apr'11
测试在这里:
http://data.stackexchange.com/stackoverflow/q/114801/declaration-of-variables
+0
这真是太棒了。非常感谢你 – suryakiran
为什么特定的递归CTE的要求? –
我们已经创建了一个实现相同的功能。但是为了缓解其他问题,我们正在进行递归CTE。 – suryakiran
这就排除了一些其他可能的方法,比如'XML PATH',它可能(或者可能不会)更高效。 –