Pregunta

Estoy construyendo un informe de SSRS.

En el informe, la semana siempre se ejecuta de lunes -. Domingo
Y quiero averiguar la fecha final de las dos semanas anteriores START y.

Por ejemplo,

Si la fecha actual = Ene 1, 2011
- semana en curso = 27 dic 2010 a 2 en 2011
- La semana anterior = 12 20, 2010 hasta diciembre 26, 2010

He intentado lo siguiente, pero parece que falla cuando al día actual = Domingo

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

¿Cómo puedo solucionarlo?

¿Fue útil?

Solución

No estoy seguro si esta es la solución más elegante, pero se podía hacer una declaración con su caso @offset como esto:

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

Creo que funciona para todos los casos.

Otros consejos

Agregar una tabla [Calendar] a su base de datos con todos los datos que necesitas precalculados. A continuación, puede incluir campos con el nombre del día, número, vacaciones, etc y simplemente mirar hacia arriba los valores que necesita.

Es mucho más simple que juega con DATEADD

Un artículo útil en las mesas de calendario: ¿Por qué debería considerar el uso de un calendario de mesa auxiliar?

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top