Мисля, че вашата заявка дава правилния резултат, но може да бъде малко опростена.
Въпреки това зависи от SET DATEFIRST настройка.
datepart(dw,[Date]) = 1
ще отчита броя на понеделниците, ако SET DATEFIRST
е 1.
Опитайте това:
set datefirst 7 -- Sunday
select datepart(dw, '20111227')
set datefirst 1 -- Monday
select datepart(dw, '20111227')
Резултат:
-----------
3
-----------
2
Актуализация: Друга заявка, която прави същото.
select count(*) as Daycount
from master..spt_values as Number
where Number.type = 'P' and
dateadd(day, Number.number, @StartDate) <= @EndDate and
datepart(dw, dateadd(day, Number.number, @StartDate)) = 1