Eksempel på forespørgsel nedenfor, her er nogle detaljer om, hvordan jeg løste det.
Brug af DATEDIFF(WK, ...)
vil give os antallet af uger mellem de 2 datoer. SQL Server vurderer dette som en forskel mellem ugenumre snarere end baseret på antallet af dage. Dette er perfekt, da vi kan bruge dette til at bestemme, hvor mange weekender der gik mellem datoerne.
Så vi kan gange denne værdi med 2 for at få antallet af weekenddage, der fandt sted, og trække det fra DATEDIFF(dd, ...)
for at få antallet af hverdage.
Dette opfører sig dog ikke 100 % korrekt, når start- eller slutdatoen falder på søndag. Så jeg tilføjede i nogle tilfælde logik i slutningen af beregningen for at håndtere disse tilfælde.
Du kan også overveje, om DATEDIFF
er eller ej skal være fuldt inklusiv. for eksempel. Er forskellen mellem 9/10 og 9/11 1 dag eller 2 dage? Hvis sidstnævnte, vil du gerne tilføje 1 til det endelige produkt.
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