¿Es posible configurar el inicio de la semana para la función de T-SQL DATEDIFF?

StackOverflow https://stackoverflow.com/questions/1101892

  •  12-09-2019
  •  | 
  •  

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.

¿Fue útil?

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

http: // social.msdn.microsoft.com/Forums/en-US/transactsql/thread/8cc3493a-7ae5-4759-ab2a-e7683165320b

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

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