Tôi đã thử logic này với một số trường hợp cạnh và nó có vẻ hoạt động.
SELECT DATEDIFF(d, @dFrom, @dTo)/7+1
+ CASE WHEN DATEPART(dw,@dFrom) IN (1,7) THEN -1 ELSE 0 END
+ CASE WHEN DATEPART(dw,@dTo) IN (1,7) THEN -1 ELSE 0 END
Bạn có thể thay đổi các câu lệnh CASE tùy thuộc vào cách bạn muốn xử lý các trường hợp trong đó ngày bắt đầu hoặc ngày kết thúc là một ngày cuối tuần. Trong trường hợp của tôi, tôi không bao gồm ngày cuối tuần nếu ngày bắt đầu hoặc ngày kết thúc là Thứ Bảy hoặc Chủ Nhật.