Примерна заявка по-долу, ето някои подробности за това как я реших.
Използване на DATEDIFF(WK, ...)
ще ни даде броя на седмиците между двете дати. SQL Server оценява това като разлика между номерата на седмиците, а не въз основа на броя на дните. Това е перфектно, тъй като можем да го използваме, за да определим колко уикенда са изминали между датите.
Така че можем да умножим тази стойност по 2, за да получим броя на настъпилите почивни дни и да извадим това от DATEDIFF(dd, ...)
за да получите броя на дните от седмицата.
Това обаче не работи 100% правилно, когато началната или крайната дата пада в неделя. Така че добавих в някои случаи логика в края на изчислението, за да се справя с тези случаи.
Може също така да обмислите дали DATEDIFF
трябва да бъдат напълно включващи. напр. Разликата между 9/10 и 9/11 1 ден ли е или 2 дни? Ако е последното, ще искате да добавите 1 към крайния продукт.
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