¿Cómo excluyo los días de fin de semana en una consulta de SQL Server?
-
05-07-2019 - |
Pregunta
¿Cómo excluyo los valores de una columna DateTime
que son sábados o domingos?
Por ejemplo, dados los siguientes datos:
date_created
'2009-11-26 09:00:00' -- Thursday
'2009-11-27 09:00:00' -- Friday
'2009-11-28 09:00:00' -- Saturday
'2009-11-29 09:00:00' -- Sunday
'2009-11-30 09:00:00' -- Monday
este es el resultado que estoy buscando:
date_created
'2009-11-26 09:00:00' -- Thursday
'2009-11-27 09:00:00' -- Friday
'2009-11-30 09:00:00' -- Monday
¡Gracias!
Solución
Cuando se trata de cálculos del día de la semana, es importante tener en cuenta el DATEFIRST
configuración. Esta consulta siempre excluirá correctamente los días de fin de semana, utilizando @@ DATEFIRST
para tener en cuenta cualquier configuración posible para el primer día de la semana.
SELECT *
FROM your_table
WHERE ((DATEPART(dw, date_created) + @@DATEFIRST) % 7) NOT IN (0, 1)
Otros consejos
SELECT date_created
FROM your_table
WHERE DATENAME(dw, date_created) NOT IN ('Saturday', 'Sunday')
Suponiendo que está utilizando SQL Server, use DATEPART con dw:
SELECT date_created
FROM your_table
WHERE DATEPART(dw, date_created) NOT IN (1, 7);
EDITAR: debo señalar que el valor numérico real devuelto por DATEPART (dw) está determinado por el valor establecido mediante SET DATEFIRST:
http://msdn.microsoft.com/en-us/library/ms181598.aspx
Pruebe la función DATENAME ()
:
select [date_created]
from table
where DATENAME(WEEKDAY, [date_created]) <> 'Saturday'
and DATENAME(WEEKDAY, [date_created]) <> 'Sunday'
La respuesta depende de la configuración de inicio de semana de su servidor, por lo que es
SELECT [date_created] FROM table WHERE DATEPART(w,[date_created]) NOT IN (7,1)
si el domingo es el primer día de la semana para su servidor
o
SELECT [date_created] FROM table WHERE DATEPART(w,[date_created]) NOT IN (6,7)
si el lunes es el primer día de la semana para su servidor
Comenta si tienes alguna pregunta :-)
Calcular dejar días hábiles en una columna de la tabla como un valor predeterminado - actualizado
Si está utilizando SQL, aquí está la consulta que puede ayudarlo: http: //gallery.technet.microsoft.com/Calculate ...
Pruebe este código
select (DATEDIFF(DD,'2014-08-01','2014-08-14')+1)- (DATEDIFF(WK,'2014-08-01','2014-08-14')* 2)