see this sql below
DECLARE @FirstOfMonth DATE={ts'2011-02-01 00:00:00'};
SELECT DAY(DayNumber) AS DayNumber
,CAST(DayNumber AS Date) DayDate
,DATEPART(WEEKDAY,DayNumber) AS WeekDayIndx
FROM(
SELECT TOP (CASE WHEN YEAR(@FirstOfMonth) % 4 = 0 THEN 366 ELSE 365 END)
DATEADD(DAY
,ROW_NUMBER() OVER (ORDER BY (SELECT NULL)) -1
, CAST(YEAR(@FirstOfMonth) AS VARCHAR(4)) + '0101' ) DayNumber
From master..spt_values
)x
WHERE DayNumber > DATEADD(SECOND,-1,DATEADD(MONTH, DATEDIFF(MONTH,0,@FirstOfMonth),0))
AND DayNumber < DATEADD(SECOND,-1,DATEADD(MONTH, DATEDIFF(MONTH,0,@FirstOfMonth)+1,0))
does this line perfectly calculate leap year
CASE WHEN YEAR(@FirstOfMonth) % 4 = 0 THEN 366 ELSE 365 END
see this url http://blog.sqlauthority.com/2012/03/03/sql-server-various-leap-year-logics/
they use bit different logic to calculate leap year
IIF((@Year%4=0
AND @Year%100
!= 0) OR
@Year%400=0,
1,0)
so tell me what to change in first sql to make it calculate right way leap year. thanks