Wypróbowałem tę logikę z kilkoma skrajnymi przypadkami i wydaje się, że działa.
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
Możesz zmienić instrukcje CASE w zależności od tego, jak chcesz obsługiwać przypadki, w których data początkowa lub końcowa przypada na weekend. W moim przypadku nie uwzględniam weekendu, jeśli datą rozpoczęcia lub zakończenia jest sobota lub niedziela.