Question

Je construis un rapport de SSRS.

Dans le rapport, la semaine passe toujours du lundi -. Dimanche
Et je veux savoir la date de début et de fin de deux semaines avant.

Par exemple,

Si la date actuelle = 1 janvier 2011
- semaine en cours = 27 déc 2010 au 2 janvier 2011
- semaine précédente = 20 déc 2010 au 26 décembre 2010

J'ai essayé ce qui suit, mais semble comme elle échoue quand quand le jour courant = dimanche

DECLARE @DT DATETIME
DECLARE @Offset INT
DECLARE @CM DATETIME
DECLARE @PM DATETIME
DECLARE @PS DATETIME

--SET @DT = GETDATE()
SET @DT = '11/14/2010' -- Monday
SET @Offset = (DATEPART(WEEKDAY, @DT) - 2) * -1
SET @CM = DATEADD(DAY, @Offset, @DT)
SET @PM = DATEADD(DAY, -7, @CM)
SET @PS = DATEADD(DAY, -1, @CM)

SELECT @Offset AS Offset, @DT AS Date, @CM AS Monday, @PM AS [Previous Monday], @PS AS [Previous Sunday], DATEPART(WK, @PM) AS Week

Comment puis-je résoudre ce problème?

Était-ce utile?

La solution

Je ne sais pas si cela est la solution la plus élégante, mais vous pouvez faire une déclaration de cas avec votre @offset comme ceci:

SET @offset = CASE WHEN DATEPART(weekday, @today) >= 2
                  THEN -(DATEPART(weekday, @today) - 2)
                  ELSE -(DATEPART(weekday, @today) + 5)
               END

Je crois que cela fonctionne pour tous les cas.

Autres conseils

Ajouter une table [Calendar] à votre DB avec toutes les dates dont vous avez besoin précalculées. Vous pouvez ensuite inclure des champs avec le nom du jour, le nombre, vacances, etc., et il suffit de regarder les valeurs dont vous avez besoin.

Il est beaucoup plus simple que de jouer avec DATEADD

Un article utile sur les tables de calendrier: Pourquoi devrais-je envisager d'utiliser une table de calendrier auxiliaire?

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top