Obtenir le nom du jour de la semaine à partir d'une Date donnée dans SQL Server

J'essaie d'obtenir un nom de jour comme Vendredi, Samedi, Dimanche, Lundi, etc. à partir d'une date donnée. Je sais qu'il existe une fonction intégrée qui renvoie le nom du jour par exemple:

SELECT DATENAME(dw,'09/23/2013') as theDayName 

Cette requête SQL renvoie:

'lundi'

Tout est OK. Mais je voudrais passer Month, Day and Year individuellement.

J'utilise la fonction datepart intégrée pour récupérer le mois, le jour et l'année d'une date afin que je puisse le passer à la fonction DATENAME:

SELECT DATEPART(m, GETDATE()) as theMonth  -- returns 11
SELECT DATEPART(d, GETDATE()) as theDay   -- returns 20
SELECT DATEPART(yy, GETDATE()) as theYear   -- returns 2013

Maintenant que j'ai Mois, Jour, Année valeurs individuellement, je le passe à mon DATENAME pour obtenir le Weekname de la date que je veux:

--my SQL query to return dayName
SELECT (DATENAME(dw, DATEPART(m, GETDATE())/DATEPART(d, myDateCol1)/ DATEPART(yy, getdate())))  as myNameOfDay, FirstName, LastName FROM myTable

Renvoie un nom de jour incorrect. J'ai essayé replace / with-de sorte que dans la fonction DATENAME ma requête SQL devienne:

SELECT DATENAME(dw,'09/23/2013') 
--becomes
SELECT DATENAME(dw,'09-23-2013') 

Mais il renvoie toujours un nom de jour incorrect de ma requête SQL. Ai-je raté quelque chose ici.

S'il vous plaît conseiller.

44
demandé sur Gringo Suave 2013-11-21 00:57:54

6 réponses

Vous devez construire une chaîne de date. Vous utilisez des opérateurs / ou - qui effectuent des opérations mathématiques/numériques sur les valeurs de retour numériques de DATEPART. Alors DATENAME prend cette valeur numérique et l'interprète comme une date.

Vous devez le convertir en chaîne. Par exemple:

SELECT (
  DATENAME(dw, 
  CAST(DATEPART(m, GETDATE()) AS VARCHAR) 
  + '/' 
  + CAST(DATEPART(d, myDateCol1) AS VARCHAR) 
  + '/' 
  + CAST(DATEPART(yy, getdate()) AS VARCHAR))
  )
35
répondu Eli Gassert 2013-11-20 21:02:37

Testé et fonctionne sur SQL 2005 et 2008. Je ne sais pas si cela fonctionne en 2012 et plus tard.

La solution utilise DATENAME au lieu de DATEPART

select datename(dw,getdate()) --Thursday
select datepart(dw,getdate()) --2
58
répondu Irfan Raza 2018-08-23 15:05:36

Si vous avez SQL Server 2012:

Si vos parties de date sont des entiers, vous pouvez utiliser DATEFROMPARTS Fonction.

SELECT DATENAME( dw, DATEFROMPARTS( @Year, @Month, @Day ) )

Si vos parties de date sont des chaînes, vous pouvezCONCAT Fonction.

SELECT DATENAME( dw, CONVERT( date, CONCAT( @Day, '/' , @Month, '/', @Year ), 103 ) )
6
répondu Greenstone Walker 2013-11-21 00:07:36

Essayez comme ceci: select DATENAME (DW,GETDATE ())

2
répondu Author PraWin 2018-04-30 12:33:34
SELECT DATENAME(DW,CONVERT(VARCHAR(20),GETDATE(),101))
0
répondu Chandra Sekhar Reddy Ginuga 2017-08-25 11:53:56

J'ai utilisé

select
case
when (extract (weekday from DATE)=0) then 'Sunday'

Et ainsi de suite...

0 Dimanche 1 Lundi...

-1
répondu Leo Fazzi 2018-06-21 17:08:34