Come escludo i giorni del fine settimana in una query di SQL Server?
-
05-07-2019 - |
Domanda
Come posso escludere i valori in una colonna DateTime
che sono sabato o domenica?
Ad esempio, dati 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!
Soluzione
Quando si ha a che fare con i calcoli del giorno della settimana, è importante tenere conto dell'attuale DATEFIRST
. Questa query esclude sempre correttamente i giorni del fine settimana, utilizzando @@ DATEFIRST
per tenere conto di ogni possibile impostazione per il primo giorno della settimana.
SELECT *
FROM your_table
WHERE ((DATEPART(dw, date_created) + @@DATEFIRST) % 7) NOT IN (0, 1)
Altri suggerimenti
SELECT date_created
FROM your_table
WHERE DATENAME(dw, date_created) NOT IN ('Saturday', 'Sunday')
Supponendo che tu stia utilizzando SQL Server, usa DATEPART con dw:
SELECT date_created
FROM your_table
WHERE DATEPART(dw, date_created) NOT IN (1, 7);
MODIFICA: Devo sottolineare che il valore numerico effettivo restituito da DATEPART (dw) è determinato dal valore impostato utilizzando SET DATEFIRST:
http://msdn.microsoft.com/en-us/library/ms181598.aspx
Prova la funzione DATENAME ()
:
select [date_created]
from table
where DATENAME(WEEKDAY, [date_created]) <> 'Saturday'
and DATENAME(WEEKDAY, [date_created]) <> 'Sunday'
La risposta dipende dalla configurazione di inizio settimana del server, quindi è
SELECT [date_created] FROM table WHERE DATEPART(w,[date_created]) NOT IN (7,1)
se domenica è il primo giorno della settimana per il tuo server
o
SELECT [date_created] FROM table WHERE DATEPART(w,[date_created]) NOT IN (6,7)
se lunedì è il primo giorno della settimana per il tuo server
Commenta se hai domande :-)
Calcola Lascia giorni lavorativi in ??una colonna della tabella come valore predefinito - aggiornato
Se si utilizza SQL, ecco la query che può essere d'aiuto: http: //gallery.technet.microsoft.com/Calculate ...
Prova questo codice
select (DATEDIFF(DD,'2014-08-01','2014-08-14')+1)- (DATEDIFF(WK,'2014-08-01','2014-08-14')* 2)