Exemple de requête ci-dessous, voici quelques détails sur la façon dont je l'ai résolu.
Utilisation de DATEDIFF(WK, ...)
nous donnera le nombre de semaines entre les 2 dates. SQL Server évalue cela comme une différence entre les numéros de semaine plutôt qu'en fonction du nombre de jours. C'est parfait, car nous pouvons l'utiliser pour déterminer combien de week-ends se sont écoulés entre les dates.
Nous pouvons donc multiplier cette valeur par 2 pour obtenir le nombre de jours de week-end qui se sont produits et soustraire cela du DATEDIFF(dd, ...)
pour obtenir le nombre de jours de la semaine.
Cependant, cela ne se comporte pas correctement à 100 % lorsque la date de début ou de fin tombe le dimanche. J'ai donc ajouté dans certains cas une logique à la fin du calcul pour gérer ces instances.
Vous pouvez également envisager si oui ou non le DATEDIFF
doit être totalement inclusif. par exemple. La différence entre le 10 septembre et le 11 septembre est-elle de 1 jour ou de 2 jours ? Dans ce dernier cas, vous voudrez ajouter 1 au produit final.
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