2012-03-05 12 views
24

Dato un datetime, esiste un modo in cui possiamo sapere che si tratta di uno Saturday o Sunday.Come verificare se datetime accade sabato o domenica in SQL Server 2008

Tutte le idee e suggerimenti sono apprezzati!

+2

Tu ** sai ** che la ** documentazione ** completa di SQL Server è disponibile ** online e gratuitamente ** su [MSDN Books Online] (http://msdn.microsoft.com/it/ us/library/ms130214.aspx) - giusto ?? Ci sono tutorial qui, Riferimento del programmatore - tu lo chiami .... con circa una ricerca e due clic, troverai la [documentazione sulla funzione T-SQL di 'DATENAME'] (http://msdn.microsoft.com /en-us/library/ms174395.aspx) –

+1

@marc_s, FYI il secondo risultato della ricerca di Google per "sql server weekend" è questa pagina. Con circa una ricerca e un clic, troverai il tuo commento snarky. – user2023861

+1

@ user2023861: va bene - ** Resto dal mio commento **, e posso assolutamente conviverci. I programmatori di oggi dovrebbero davvero imparare prima a consultare la documentazione ufficiale del prodotto, per domande di base come questa. Se si dispone di un problema più complesso che potrebbe non essere coperto nei documenti del prodotto - questo è il momento in cui si dovrebbe venire a SO - ma non per le domande di SQL Server 101 come questa. Davvero: impara a leggere i favolosi manuali e la documentazione online! –

risposta

51

Molti modi per fare questo , puoi utilizzare DATENAME e controllare le stringhe effettive "Sabato" o "Domenica"

SELECT DATENAME(DW, GETDATE()) 

Oppure utilizzare il giorno della settimana e verificare la presenza di 1 (Domenica) o 7 (Sabato)

SELECT DATEPART(DW, GETDATE()) 
+4

Fare attenzione a causa di @@ DATEFIRST (vedere la risposta di seguito) https://msdn.microsoft.com/de-de/library/ms181598.aspx – Jakob

+1

Attenzione: utilizzare 'SET DATEFIRST 7' per assicurarsi che funzioni fuori dai sistemi statunitensi! –

3

questo modo si ottiene il nome del giorno:

SELECT DATENAME(weekday, GETDATE()) 
8
DECLARE @dayNumber INT; 
SET @dayNumber = DATEPART(DW, GETDATE()); 

--Sunday = 1, Saturday = 7. 
IF(@dayNumber = 1 OR @dayNumber = 7) 
    PRINT 'Weekend'; 
ELSE 
    PRINT 'NOT Weekend'; 

Questo può generare risultati errati, perché il numero prodotto dal datepart giorno della settimana dipende dal valore impostato da SET DATEFIRST. Questo imposta il primo giorno della settimana. Quindi un altro modo è:

DECLARE @dayName VARCHAR(9); 
SET @dayName = DATEName(DW, GETDATE()); 

IF(@dayName = 'Saturday' OR @dayName = 'Sunday') 
    PRINT 'Weekend'; 
ELSE 
    PRINT 'NOT Weekend'; 
2

Attenzione: Le altre risposte funzionano solo su SQL Server con configurazione in inglese! Utilizzare SET DATEFIRST 7 per assicurare DATEPART(DW, ...) restituisce 1 per domenica e 7 per sabato.

Ecco una versione che è indipendente dal contesto locale e non richiede di utilizzare:

CREATE FUNCTION [dbo].[fct_IsDateWeekend] (@date DATETIME) 
RETURNS BIT 
AS 
BEGIN 
    RETURN CASE WHEN DATEPART(DW, @date + @@DATEFIRST - 1) > 5 THEN 1 ELSE 0 END; 
END; 

Se non si desidera utilizzare la funzione, è sufficiente utilizzare questo nel vostro SELECT:

CASE WHEN DATEPART(DW, YourDateTime + @@DATEFIRST - 1) > 5 THEN 'Weekend' ELSE 'Weekday' END 
0

ok i capire:

DECLARE @dayName VARCHAR(9), @weekenda VARCHAR(9), @free INT 
SET @weekenda =DATENAME(dw,GETDATE()) 

IF (@weekenda='Saturday' OR @weekenda='Sunday') 
SET @free=1 
ELSE 
SET @free=0 

che i uso: .......... OR libera = 1

Problemi correlati