Przykładowe zapytanie poniżej, oto kilka szczegółów na temat tego, jak je rozwiązałem.
Używanie DATEDIFF(WK, ...)
poda nam liczbę tygodni między 2 datami. SQL Server ocenia to jako różnicę między numerami tygodni, a nie na podstawie liczby dni. To jest idealne, ponieważ możemy to wykorzystać do określenia, ile weekendów minęło między datami.
Możemy więc pomnożyć tę wartość przez 2, aby uzyskać liczbę dni weekendu, które miały miejsce, i odjąć ją od DATEDIFF(dd, ...)
aby uzyskać liczbę dni tygodnia.
Nie działa to jednak w 100% poprawnie, gdy data rozpoczęcia lub zakończenia przypada w niedzielę. Więc dodałem w niektórych przypadkach logikę na końcu obliczeń, aby obsłużyć te instancje.
Możesz również rozważyć, czy DATEDIFF
powinna być w pełni inkluzywna. np. Czy różnica między 9/10 a 9/11 1 dzień czy 2 dni? Jeśli to drugie, będziesz chciał dodać 1 do produktu końcowego.
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