¿Es posible configurar el inicio de la semana para la función de T-SQL DATEDIFF?
Pregunta
DATEDIFF función para filtrar registros agregan solamente esta semana:
DATEDIFF(week, DateCreated, GETDATE()) = 0
y me di cuenta de lo que se asume que la semana comienza el domingo. Pero en mi caso yo preferiría fijar comienzo de la semana el lunes. ¿Es posible de alguna forma en T-SQL?
Gracias!
Actualización:
A continuación se muestra un ejemplo que muestra lo DATEDIFF no comprueba @@ DATEFIRST variables así que necesito otra solución.
SET DATEFIRST 1;
SELECT
DateCreated,
DATEDIFF(week, DateCreated, CAST('20090725' AS DATETIME)) AS D25,
DATEDIFF(week, DateCreated, CAST('20090726' AS DATETIME)) AS D26
FROM
(
SELECT CAST('20090724' AS DATETIME) AS DateCreated
UNION
SELECT CAST('20090725' AS DATETIME) AS DateCreated
) AS T
Salida:
DateCreated D25 D26
----------------------- ----------- -----------
2009-07-24 00:00:00.000 0 1
2009-07-25 00:00:00.000 0 1
(2 row(s) affected)
26 Jul 2009 es el domingo, y quiero DATEDIFF devuelve 0 en la tercera columna también.
Solución
Sí, es posible
SET DATEFIRST 1; -- Monday
desde http://msdn.microsoft.com/en-us/library /ms181598.aspx
Parece datediff no respeta la DATEFIRST, por lo que hacer que funcione ejecutarlo como esto
create table #testDates (id int identity(1,1), dateAdded datetime)
insert into #testDates values ('2009-07-09 15:41:39.510') -- thu
insert into #testDates values ('2009-07-06 15:41:39.510') -- mon
insert into #testDates values ('2009-07-05 15:41:39.510') -- sun
insert into #testDates values ('2009-07-04 15:41:39.510') -- sat
SET DATEFIRST 7 -- Sunday (Default
select * from #testdates where datediff(ww, DATEADD(dd,-@@datefirst,dateadded), DATEADD(dd,-@@datefirst,getdate())) = 0
SET DATEFIRST 1 -- Monday
select * from #testdates where datediff(ww, DATEADD(dd,-@@datefirst,dateadded), DATEADD(dd,-@@datefirst,getdate())) = 0
robado a
Otros consejos
Tengo otra solución. Esto debería ser más fácil de entender, me corrija si estoy equivocado
SET DATEFIRST 1
select DATEDIFF(week, 0, DATEADD(day, -@@DATEFIRST, '2018-04-15 00:00:00.000'))
restamos '-1' partir de la fecha y el domingo se convertirá en sábado (que es el día de la semana 7nth) y Mondфy (2) lo hará el primer día de la semana