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 va bien. Mais je voudrais passer Month, Day and Year
individuellement.
J'utilise la fonction DATEPART intégrée pour extraire le mois, le jour et l'année d'une date afin de pouvoir la transmettre à 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 les valeurs Mois, Jour, Année 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
Cela renvoie un nom de jour incorrect. J'ai essayé de remplacer/avec - pour 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 dayName incorrect de ma requête SQL. Est-ce que j'ai râté quelque chose.
S'il vous plaît donnez votre avis.
Vous devez construire une chaîne de date. Vous utilisez des opérateurs /
ou -
qui effectuent des opérations MATH/numériques sur les valeurs de retour numériques de DATEPART. Ensuite, 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 sous SQL 2005 et 2008. Je ne sais pas si cela fonctionnera en 2012 et après.
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 la fonction DATEFROMPARTS
.
SELECT DATENAME( dw, DATEFROMPARTS( @Year, @Month, @Day ) )
Si vos parties de date sont des chaînes, vous pouvez utiliser la fonction CONCAT
.
SELECT DATENAME( dw, CONVERT( date, CONCAT( @Day, '/' , @Month, '/', @Year ), 103 ) )
Essayez comme ceci: sélectionnez DATENAME (DW, GETDATE ())
SELECT DATENAME(DW,CONVERT(VARCHAR(20),GETDATE(),101))