Tôi nghĩ rằng truy vấn của bạn mang lại kết quả chính xác nhưng có thể được đơn giản hóa một chút.
Tuy nhiên, nó phụ thuộc vào ĐẶT DATEFIRST cài đặt.
datepart(dw,[Date]) = 1
sẽ tính số ngày Thứ Hai nếu SET DATEFIRST
là 1.
Hãy thử điều này:
set datefirst 7 -- Sunday
select datepart(dw, '20111227')
set datefirst 1 -- Monday
select datepart(dw, '20111227')
Kết quả:
-----------
3
-----------
2
Cập nhật: Một truy vấn khác cũng thực hiện tương tự.
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