SELECT [year], [month], datename(month,dateadd(mm,[month] -1,DATEADD(yy, DATEDIFF(yy,0,[year] - 1900), 0)))FROM (SELECT 2005 AS [year] UNION ALL SELECT 2006 UNION ALL SELECT 2007 UNION ALL SELECT 2008 UNION ALL SELECT 2009 UNION ALL SELECT 2010 UNION AllSELECT 2011 UNION AllSELECT 2012 UNION ALLSELECT 2013 ) yearsCROSS JOIN (SELECT 1 AS [month] UNION ALL SELECT 2 UNION ALL SELECT 3 UNION ALL SELECT 4 UNION ALL SELECT 5 UNION ALL SELECT 6 UNION ALL SELECT 7 UNION ALL SELECT 8 UNION ALL SELECT 9 UNION ALL SELECT 10 UNION ALL SELECT 11 UNION ALL SELECT 12) monthsorderORDER BY years.[year], monthsorder.[month]
select t.Number as [year] , m.[month] , DateName(month,DateAdd(month,(m.[month]-1),0)) as MonthNamefrom tally tcross join (values (1),(2),(3),(4),(5),(6),(7),(8),(9),(10),(11),(12)) m([month])where t.Number between DatePart(year,GetDate()) - 100 and DatePart(year,GetDate()) + 200
DECLARE @StartDATE DATETIMESET @StartDATE = '01-01-1985';WITH Tens (N) AS( SELECT 0 N UNION ALL SELECT 0 UNION ALL SELECT 0 UNION ALL SELECT 0 UNION ALL SELECT 0 UNION ALL SELECT 0 UNION ALL SELECT 0 UNION ALL SELECT 0 UNION ALL SELECT 0 UNION ALL SELECT 0), Thousands (N) AS ( SELECT t1.N FROM Tens t1 CROSS JOIN Tens t2 CROSS JOIN Tens t3), Tally AS ( SELECT ROW_NUMBER() OVER (ORDER BY (SELECT 0)) N FROM Thousands),Month_Numbers ( MonthNum , Month_Name) AS( SELECT 1 , 'January' UNION ALL SELECT 2 , 'February' UNION ALL SELECT 3 , 'March' UNION ALL SELECT 4 , 'April' UNION ALL SELECT 5 , 'May' UNION ALL SELECT 6 , 'June' UNION ALL SELECT 7 , 'July' UNION ALL SELECT 8 , 'August' UNION ALL SELECT 9 , 'September' UNION ALL SELECT 10 , 'October' UNION ALL SELECT 11 , 'November' UNION ALL SELECT 12 , 'December')SELECT Nums.MonthNum , DATEPART(YY,DATEADD(M,N-1,@StartDATE)) [YEAR], DATENAME(MM,DATEADD(M,N-1,@StartDATE)) [MONTH]FROM Tally TJOIN Month_Numbers Nums ON DATENAME(MM,DATEADD(M,N-1,@StartDATE)) = Nums.Month_NameWHERE DATEPART(YY,DATEADD(M,N-1,@StartDATE)) <= YEAR(GETDATE())
DECLARE @StartDATE DATETIMESET @StartDATE = '01-01-1985';WITH Tens (N) AS( SELECT 0 N UNION ALL SELECT 0 UNION ALL SELECT 0 UNION ALL SELECT 0 UNION ALL SELECT 0 UNION ALL SELECT 0 UNION ALL SELECT 0 UNION ALL SELECT 0 UNION ALL SELECT 0 UNION ALL SELECT 0), Thousands (N) AS ( SELECT t1.N FROM Tens t1 CROSS JOIN Tens t2 CROSS JOIN Tens t3), Tally AS ( SELECT ROW_NUMBER() OVER (ORDER BY (SELECT 0)) N FROM Thousands)SELECT MonthNum = CASE T.N % 12 WHEN 0 THEN 12 ELSE T.N % 12 END , DATEPART(YY,DATEADD(M,N-1,@StartDATE)) [YEAR] , DATENAME(MM,DATEADD(M,N-1,@StartDATE)) [MONTH]FROM Tally TWHERE DATEPART(YY,DATEADD(M,N-1,@StartDATE)) <= YEAR(GETDATE())