Domanda

Sto costruendo un rapporto di SSRS.

Nel rapporto, la settimana corre sempre da Lunedi -. Domenica
E voglio scoprire la date di inizio e fine della prima di due settimane.

Ad esempio,

Se la data corrente = 1 gennaio 2011
- settimana corrente = 27 dicembre, 2010 a 2 gennaio 2011
- precedente settimana = 20 Dicembre 2010 al 26 Dicembre 2010

Ho provato quanto segue, ma sembra che non riesce quando quando giorno corrente = Domenica

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

Come posso risolvere il problema?

È stato utile?

Soluzione

Non sono sicuro se questa è la soluzione più elegante, ma si potrebbe fare una dichiarazione caso con il vostro @Offset in questo modo:

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

Credo che funziona per tutti i casi.

Altri suggerimenti

Aggiungere una tabella [Calendar] al vostro DB con tutte le date che bisogno precalcolata. È quindi possibile includere campi con il nome del giorno, il numero, ecc vacanza e semplicemente cercare i valori necessari.

E 'molto più semplice che giocare con DATEADD

Un articolo utile sulle tavole del calendario: Perché dovrei considerare l'utilizzo di una tabella di calendario ausiliario?

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top