Truy vấn ví dụ bên dưới, đây là một số chi tiết về cách tôi đã giải quyết nó.
Sử dụng DATEDIFF(WK, ...)
sẽ cho chúng ta số tuần giữa 2 ngày. SQL Server đánh giá đây là sự khác biệt giữa các số tuần thay vì dựa trên số ngày. Điều này là hoàn hảo, vì chúng tôi có thể sử dụng điều này để xác định có bao nhiêu ngày cuối tuần trôi qua giữa các ngày.
Vì vậy, chúng tôi có thể nhân giá trị đó với 2 để lấy số ngày cuối tuần đã xảy ra và trừ giá trị đó khỏi DATEDIFF(dd, ...)
để lấy số ngày trong tuần.
Tuy nhiên, điều này không hoạt động chính xác 100% khi ngày bắt đầu hoặc ngày kết thúc rơi vào Chủ nhật. Vì vậy, tôi đã thêm một số logic trường hợp vào cuối phép tính để xử lý các trường hợp đó.
Bạn cũng có thể muốn xem xét có hay không DATEDIFF
nên được bao gồm đầy đủ. ví dụ. Sự khác biệt giữa 9/10 và 11/9 là 1 ngày hay 2 ngày? Nếu sau này, bạn sẽ muốn thêm 1 vào sản phẩm cuối cùng.
declare @d1 datetime, @d2 datetime
select @d1 = '9/9/2011', @d2 = '9/18/2011'
select datediff(dd, @d1, @d2) - (datediff(wk, @d1, @d2) * 2) -
case when datepart(dw, @d1) = 1 then 1 else 0 end +
case when datepart(dw, @d2) = 1 then 1 else 0 end