2009-11-26 11 views
52

Comment exclure les valeurs d'une colonne DateTime qui sont des samedis ou des dimanches?Comment exclure les jours de fin de semaine dans une requête SQL Server?

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 cherche:

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

Merci!

Répondre

105

Lors de calculs de jour de la semaine, il est important de prendre en compte les paramètres DATEFIRST actuels. Cette requête exclura toujours correctement les jours de week-end, en utilisant @@DATEFIRST pour prendre en compte tout paramètre possible pour le premier jour de la semaine.

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

Beau raffinement: +1! :-) – gkrogers

+1

Super merci! –

8

Essayez la fonction DATENAME():

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

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 tiens à souligner que la valeur numérique réelle retournée par DATEPART (dw) est déterminé par la valeur définie à l'aide de SET DATEFIRST:
http://msdn.microsoft.com/en-us/library/ms181598.aspx

+0

Il est possible de gérer automatiquement tous les paramètres possibles de 'DATEFIRST'. Voir ma réponse pour plus de détails. – LukeH

+0

Excellent conseil: +1! :-) – gkrogers

2

La réponse dépend de la semaine de démarrage de votre serveur mis en place, il est donc 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 lundi est le premier jour de la semaine pour votre serveur

Si vous avez des questions :-)

+0

Il est possible de gérer automatiquement tous les paramètres possibles de 'DATEFIRST'. Voir ma réponse pour plus de détails. – LukeH

+0

Un gentil Luke, je me demandais comment faire ça ... – Gausie

17
SELECT date_created 
FROM your_table 
WHERE DATENAME(dw, date_created) NOT IN ('Saturday', 'Sunday') 
+1

Cela peut être problématique cependant. Exécutez ce script: 'set language italian; sélectionnez DATENAME (WEEKDAY, '2015-01-01'); 'Le résultat est' giovedì'. – HuBeZa

+2

Bon point HuBeZa, pour traduire le jour dans une autre langue Je voudrais exécuter le suivant 'SELECT * FROM sys.syslanguages' et cherchez la langue que vous souhaitez traduire – kevchadders

-1

Try this code

select (DATEDIFF(DD,'2014-08-01','2014-08-14')+1)- (DATEDIFF(WK,'2014-08-01','2014-08-14')* 2)