2014-09-03 1 views
0

J'essaie de créer un moyen flexible de déterminer le dernier jour de la semaine précédente, sachant que cela sera exécuté dans différents environnements qui ont différentes semaines de planification (certains clients utilisent Sam-ven, dim-sam, lun-dim). Je comptais sur la création d'une variable à utiliser comme jour de début de la semaine de chaque client (voir ci-dessous)SQL - Déterminer le dernier jour de la semaine précédente avec flexibilité

Set @BeginningWeek = 1 -- 1=Mon; 2=Tues; 3=Wed; 4=Thurs; 5=Fri; 6=Sat; 7=Sun 

J'ai essayé d'utiliser une combinaison de dateadd et datepart, ainsi que la variable ci-dessus pour essayer de obtenir le précédent dernier jour de la semaine, mais j'ai des problèmes avec la logique. Je ne veux pas utiliser Set DateFirst, ces scripts seront exécutés sur un environnement client, donc je ne veux rien changer dans leur base de données.

En supposant que le script est exécuté un mercredi (9/3); et la semaine de planification du client est sat-fri; Je voudrais mettre une autre variable @EndDate = le vendredi précédent (8/29). J'ai besoin de la flexibilité pour utiliser le même script (en changeant uniquement la valeur @BeginningWeek) avec un autre client dont la semaine de planification est Lun-Dim et mettre @EndDate = le dimanche précédent (8/31).

+0

Quel RDBMS utilisez-vous? – Andrew

+0

Microsoft SQL Server – NRud

Répondre

0

Vous obtiendrez le samedi précédent.

SELECT DATEADD(day, 
       -1 - (DATEPART(dw, GETDATE()) + @@DATEFIRST - 2) % 6, 
       GETDATE() 
     ) 

Vous devriez être en mesure de remplacer le bit %6 avec un paramètre en fonction de ce que le jour de votre choix réel est.

Questions connexes