61 votes

Comment exclure les jours de week-end dans une requête SQL Server ?

Comment exclure des valeurs dans un DateTime colonne qui sont des samedis ou des dimanches ?

Par exemple, étant donné les données suivantes :

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

c'est le résultat que je recherche :

date_created
'2009-11-26 09:00:00'  -- Thursday
'2009-11-27 09:00:00'  -- Friday
'2009-11-30 09:00:00'  -- Monday

Merci !

119voto

LukeH Points 110965

Lorsqu'il s'agit de calculer le jour de la semaine, il est important de tenir compte de l'heure actuelle. DATEFIRST paramètres. Cette requête exclura toujours correctement les jours de week-end, en utilisant les paramètres suivants @@DATEFIRST pour tenir compte de tout réglage possible pour le premier jour de la semaine.

SELECT *
FROM your_table
WHERE ((DATEPART(dw, date_created) + @@DATEFIRST) % 7) NOT IN (0, 1)

20voto

kevchadders Points 5819
SELECT date_created
FROM your_table
WHERE DATENAME(dw, date_created) NOT IN ('Saturday', 'Sunday')

13voto

gkrogers Points 4830

En supposant que vous utilisez SQL Server, utilisez DATEPART avec dw :

SELECT date_created
FROM your_table
WHERE DATEPART(dw, date_created) NOT IN (1, 7);

EDIT : Je dois préciser que la valeur numérique réelle renvoyée par DATEPART(dw) est déterminée par la valeur définie en utilisant SET DATEFIRST :
http://msdn.microsoft.com/en-us/library/ms181598.aspx

10voto

Andrew Points 4523

Essayez le DATENAME() fonction :

select [date_created]
from table
where DATENAME(WEEKDAY, [date_created]) <> 'Saturday'
  and DATENAME(WEEKDAY, [date_created]) <> 'Sunday'

4voto

Gausie Points 2157

La réponse dépend de la configuration du démarrage hebdomadaire de votre serveur, soit

SELECT [date_created] FROM table WHERE DATEPART(w,[date_created]) NOT IN (7,1)

si le dimanche est le premier jour de la semaine pour votre serveur

ou

SELECT [date_created] FROM table WHERE DATEPART(w,[date_created]) NOT IN (6,7)

si le lundi est le premier jour de la semaine pour votre serveur

Commentez si vous avez des questions :-)

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X