Frage

Ich baue einen SSRS-Bericht.

In dem Bericht läuft die Woche immer von Montag -. Sonntag
Und ich will die Start- und Enddaten von vor zwei Wochen erfahren.

Beispiel:

Wenn das aktuelle Datum = 1. Januar 2011
- aktuelle Woche = 27. Dezember 2010 bis 2. Januar 2011
- vorherige Woche = 20. Dezember 2010 zu 26. Dezember 2010

Ich habe folgendes versucht, aber wie es scheint, schlägt fehl, wenn beim aktuellen Tag = Sonntag

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

Wie kann ich das Problem beheben?

War es hilfreich?

Lösung

Nicht sicher, ob dies die eleganteste Lösung ist, aber man könnte eine Case-Anweisung mit Ihrem @offset wie folgt zu tun:

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

Ich glaube, es für alle Fälle funktioniert.

Andere Tipps

Fügen Sie eine [Calendar] Tabelle auf Ihre DB mit allen Daten, die Sie brauchen vorberechnet. Anschließend können Sie umfassen Felder mit dem Tag Name, Nummer, Urlaub usw. und einfach die Werte sehen Sie benötigen.

Es ist viel einfacher als bei DATEADD spielen

Ein nützlicher Artikel über Kalender Tabellen: Warum soll ich mit einer Hilfs Kalender Tabelle betrachten?

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top