2009-11-26 26 views
52

Come escludere i valori in una colonna DateTime che sono sabato o domenica?Come escludere i giorni del fine settimana in una query di SQL Server?

Ad esempio, dato i seguenti dati:

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 

questo è il risultato che sto cercando:

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

Grazie!

risposta

105

Per i calcoli del giorno della settimana, è importante tenere conto delle impostazioni correnti di DATEFIRST. Questa query escluderà sempre correttamente i giorni del fine settimana, utilizzando @@DATEFIRST per tenere conto di qualsiasi impostazione possibile per il primo giorno della settimana.

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

Bel raffinamento: +1! :-) – gkrogers

+1

Grazie fantastici! –

8

Prova la funzione DATENAME():

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

Supponendo che si sta utilizzando SQL Server, utilizzare DATEPART con DW:

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

EDIT: Tengo a precisare che il valore numerico effettivo restituito per DATEPART (dw) è determinato dal valore impostato utilizzando SET DATEFIRST:
http://msdn.microsoft.com/en-us/library/ms181598.aspx

+0

È possibile gestire automaticamente qualsiasi impostazione possibile di 'DATEFIRST'. Vedi la mia risposta per i dettagli. – LukeH

+0

Consiglio eccellente: +1! :-) – gkrogers

2

La risposta dipende da una settimana dall'inizio del server set up, quindi è sia

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

se Domenica è il primo giorno della settimana per il server

o

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

se Lunedi è il primo giorno della settimana per il tuo server

Commento in caso di domande :-)

+0

È possibile gestire automaticamente tutte le possibili impostazioni di 'DATEFIRST'. Vedi la mia risposta per i dettagli. – LukeH

+0

Bello, Luke, mi stavo chiedendo come farlo ... – Gausie

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

Questo potrebbe essere problematico però. Esegui questo script: 'imposta lingua italiana; seleziona DATENAME (WEEKDAY, '2015-01-01'); 'Il risultato è' Thursday'. – HuBeZa

+2

Buon punto HuBeZa, per tradurre il giorno in un'altra lingua, eseguirò il seguente comando: SELECT * FROM sys.syslanguages' e cerca la lingua in cui desideri tradurre – kevchadders

-1

Prova questo codice

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