Comment DATEDIFF calculer la semaine différences dans SQL Server 2005?

Je voudrais calculer la différence de semaines entre les deux dates, où deux dates sont considérées comme une partie de la semaine même si leur précédent le dimanche est le même. Idéalement, j'aimerais faire cela à l'aide de DATEDIFF, au lieu d'apprendre à élaborer un idiome pour calculer la valeur. Mais je ne peux pas dire comment il fonctionne lorsque les semaines sont impliqués.

La requête suivante retourne 1 et 2. Cela peut avoir du sens si votre agenda de la semaine commence avec le dimanche, c'est à dire si vous exécutez SET DATEFIRST 7 à l'avance ou si @@DATEFIRST est de 7 par défaut.

SET DATEFIRST 7;
-- SET DATEFIRST 1;

DECLARE
    @d1 DATETIME,
    @d2a DATETIME,
    @d2b DATETIME
;
SELECT
    @d1 = '2010-04-05',   -- Monday
    @d2a = '2010-04-16',  -- Following Friday
    @d2b = '2010-04-18'   -- the Sunday following
;

SELECT
    DATEDIFF(week, @d1, @d2a) AS weekdiff_a   -- returns 1
    ,DATEDIFF(week, @d1, @d2b) AS weekdiff_b  -- returns 2
;

Donc je m'attendais à des résultats différents si SET DATEFIRST 1 est exécutée à la place de SET DATEFIRST 7. Mais les valeurs de retour sont les mêmes, peu importe!

Ce qui se passe ici? Que dois-je faire pour obtenir la bonne semaine différences?

OriginalL'auteur eksortso | 2010-04-26