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.
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))
)
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
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 ) )
SELECT DATENAME(DW,CONVERT(VARCHAR(20),GETDATE(),101))
J'ai utilisé
select
case
when (extract (weekday from DATE)=0) then 'Sunday'
Et ainsi de suite...
0 Dimanche 1 Lundi...