The code below generates values for the range between July 21, 2013 and January 15, 2014 . I usually use it in SSRS reports to generate search values for the Month parameter.
declare @from date = '20130721', @to date = '20140115'; with m as ( select * from (values ('Jan', '01'), ('Feb', '02'),('Mar', '03'),('Apr', '04'),('May', '05'),('Jun', '06'),('Jul', '07'),('Aug', '08'),('Sep', '09'),('Oct', '10'),('Nov', '11'),('Dec', '12')) as t(v, c)), y as (select cast(YEAR(getdate()) as nvarchar(4)) [v] union all select cast(YEAR(getdate())-1 as nvarchar(4))) select mv + ' ' + yv [value_field], yv + mc [label_field] from m cross join y where yv + mc between left(convert(nvarchar, @from, 112),6) and left(convert(nvarchar, @to, 112),6) order by yv + mc desc
Results:
value_field label_field --------------------------- Jan 2014 201401 Dec 2013 201312 Nov 2013 201311 Oct 2013 201310 Sep 2013 201309 Aug 2013 201308 Jul 2013 201307
Andrey Morozov
source share