58 votes

Comment vérifier si une date se trouve être un samedi ou un dimanche dans SQL Server 2008

Étant donné un datetime est-ce qu'il y a un moyen de savoir que c'est une Saturday o Sunday .

Toutes les idées et suggestions sont appréciées !

109voto

msmucker0527 Points 3567

Il existe plusieurs façons de procéder : vous pouvez utiliser DATENAME et vérifier les chaînes de caractères "samedi" ou "dimanche".

SELECT DATENAME(DW, GETDATE())

Ou utilisez le jour de la semaine et vérifiez le 1 (dimanche) ou le 7 (samedi).

SELECT DATEPART(DW, GETDATE())

16voto

Chirag Points 408
DECLARE @dayNumber INT;
SET @dayNumber = DATEPART(DW, GETDATE());

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

Cela peut générer des résultats erronés, car le nombre produit par la partie date du jour de la semaine dépend de la valeur définie par SET DATEFIRST. Ceci définit le premier jour de la semaine. Une autre façon de procéder est donc la suivante :

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

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

16voto

Saysmaster Points 388

Cette expression

SELECT (((DATEPART(DW, @my_date_var) - 1 ) + @@DATEFIRST ) % 7)

retournera toujours un nombre compris entre 0 et 6 où

0 -> Sunday
1 -> Monday
2 -> Tuesday
3 -> Wednesday
4 -> Thursday
5 -> Friday
6 -> Saturday

Indépendamment de @@DATEFIRST

Un jour de week-end est donc testé comme suit

SELECT (CASE
           WHEN (((DATEPART(DW, @my_date_var) - 1 ) + @@DATEFIRST ) % 7) IN (0,6)
           THEN 1
           ELSE 0
       END) AS is_weekend_day

6voto

JonH Points 20454

SELECT DATENAME(weekday, GetDate())

Vérifiez ceci pour le serveur sql : http://msdn.microsoft.com/en-US/library/ms174395(v=sql.90).aspx Vérifiez ceci pour .net : http://msdn.microsoft.com/en-us/library/bb762911.aspx

5voto

Peter Albert Points 8731

Attention : Les autres réponses ne fonctionnent que sur les serveurs SQL avec une configuration anglaise ! Utilisez SET DATEFIRST 7 pour garantir DATEPART(DW, ...) rendements 1 pour le dimanche et 7 pour le samedi.

Voici une version qui est indépendante du paramètre local et qui ne nécessite pas d'utiliser :

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;

Si vous ne voulez pas utiliser la fonction, utilisez simplement ceci dans votre instruction SELECT :

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

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