Je dois convertir une valeur qui se trouve dans une variable DateTime
en une variable varchar
formatée en yyyy-mm-dd
(sans partie temps).
Comment dois-je faire?
Je dois convertir une valeur qui se trouve dans une variable DateTime
en une variable varchar
formatée en yyyy-mm-dd
(sans partie temps).
Comment dois-je faire?
Voici des tests SQL pour tous les styles.
DECLARE @now datetime
SET @now = GETDATE()
select convert(nvarchar(MAX), @now, 0) as output, 0 as style
union select convert(nvarchar(MAX), @now, 1), 1
union select convert(nvarchar(MAX), @now, 2), 2
union select convert(nvarchar(MAX), @now, 3), 3
union select convert(nvarchar(MAX), @now, 4), 4
union select convert(nvarchar(MAX), @now, 5), 5
union select convert(nvarchar(MAX), @now, 6), 6
union select convert(nvarchar(MAX), @now, 7), 7
union select convert(nvarchar(MAX), @now, 8), 8
union select convert(nvarchar(MAX), @now, 9), 9
union select convert(nvarchar(MAX), @now, 10), 10
union select convert(nvarchar(MAX), @now, 11), 11
union select convert(nvarchar(MAX), @now, 12), 12
union select convert(nvarchar(MAX), @now, 13), 13
union select convert(nvarchar(MAX), @now, 14), 14
--15 à 19 non valables
union select convert(nvarchar(MAX), @now, 20), 20
union select convert(nvarchar(MAX), @now, 21), 21
union select convert(nvarchar(MAX), @now, 22), 22
union select convert(nvarchar(MAX), @now, 23), 23
union select convert(nvarchar(MAX), @now, 24), 24
union select convert(nvarchar(MAX), @now, 25), 25
--26 à 99 non valides
union select convert(nvarchar(MAX), @now, 100), 100
union select convert(nvarchar(MAX), @now, 101), 101
union select convert(nvarchar(MAX), @now, 102), 102
union select convert(nvarchar(MAX), @now, 103), 103
union select convert(nvarchar(MAX), @now, 104), 104
union select convert(nvarchar(MAX), @now, 105), 105
union select convert(nvarchar(MAX), @now, 106), 106
union select convert(nvarchar(MAX), @now, 107), 107
union select convert(nvarchar(MAX), @now, 108), 108
union select convert(nvarchar(MAX), @now, 109), 109
union select convert(nvarchar(MAX), @now, 110), 110
union select convert(nvarchar(MAX), @now, 111), 111
union select convert(nvarchar(MAX), @now, 112), 112
union select convert(nvarchar(MAX), @now, 113), 113
union select convert(nvarchar(MAX), @now, 114), 114
union select convert(nvarchar(MAX), @now, 120), 120
union select convert(nvarchar(MAX), @now, 121), 121
--122 à 125 non valables
union select convert(nvarchar(MAX), @now, 126), 126
union select convert(nvarchar(MAX), @now, 127), 127
--128, 129 non valables
union select convert(nvarchar(MAX), @now, 130), 130
union select convert(nvarchar(MAX), @now, 131), 131
--132 non valables
order BY style
Voici le résultat
output style
28 avr. 2014 9:31 0
28/04/14 1
14.04.28 2
28/04/14 3
28.04.14 4
28-04-14 5
28 avr. 14 6
28 avr. 14 7
09:31:28 8
28 avr. 2014 9:31:28 9
04-28-14 10
14/04/28 11
140428 12
28 avr. 2014 09:31 13
09:31:28 14
2014-04-28 09:31 20
2014-04-28 09:31:28 21
28/04/14 9:31 22
2014-04-28 23
09:31:28 24
2014-04-28 09:31:28 25
28 avr. 2014 9:31 100
28/04/2014 101
2014.04.28 102
28/04/2014 103
28.04.2014 104
28-04-2014 105
28 avr. 2014 106
28 avr. 2014 107
09:31:28 108
28 avr. 2014 9:31:28 109
04-28-2014 110
2014/04/28 111
20140428 112
28 avr. 2014 09:31 113
09:31:28 114
2014-04-28 09:31 120
2014-04-28 09:31:28 121
2014-04-28T09:31:28 126
2014-04-28T09:31:28 127
28 جمادى الثانية 1435 9:31 130
28/06/1435 9:31 131
Réduisez nvarchar(max)
pour raccourcir le temps. Par exemple :
select convert(nvarchar(11), GETDATE(), 0)
union select convert(nvarchar(max), GETDATE(), 0)
affiche:
18 mai 2018
18 mai 2018 9:57
Fonctionne pour SQL Server 2005 donc c'est génial pour ceux d'entre nous qui sont malheureusement encore à jongler avec des systèmes plus anciens. Passage à 2014 bientôt, excité !
Je veux formater proche de 101 - 101 = 28/04/2014, je veux sans zéro dans le mois, sortie 4/28/2014, est-ce applicable ?
Pour ceux d'entre vous qui pourraient être intéressés, ceci fonctionnerait mieux si vous changez VARCHAR en CHAR. Voir ce post (stackoverflow.com/questions/59667/…) pour plus de détails. Essentiellement, il y a 2 octets de surcharge impliqués dans VARCHAR vs CHAR. Dans ce scénario, nous savons que votre chaîne sera toujours de 10 caractères, donc CHAR est approprié.
Notez bien, d'après ce que j'ai vu, c'est dommage que aucun des formats ne respecte ce qui est défini dans DATEFORMAT, peut-être y a-t-il une autre solution.
Y a-t-il une raison d'utiliser LEFT(.., 10)
au lieu de CONVERT(CHAR(10), ...)
? Ceux qui travaillent avec les versions plus récentes de SQL Server que 2005 (!) devraient consulter la réponse de Zar Shardan suggérant une solution basée sur la fonction FORMAT(date_value, format_string)
.
Essayez ce qui suit :
CONVERT(varchar(10), [MaColonneDateTime], 20)
Pour un datetime complet et non seulement une date :
CONVERT(varchar(23), [MaColonneDateTime], 121)
Consultez cette page pour les styles de conversion :
http://msdn.microsoft.com/en-us/library/ms187928.aspx
OU
Fonction CONVERT() SQL Server
SQL Server 2012 a une nouvelle fonction, FORMAT : http://msdn.microsoft.com/en-us/library/ee634924.aspx
et vous pouvez utiliser des chaînes de format de date et d'heure personnalisées : http://msdn.microsoft.com/en-us/library/ee634398.aspx
Ces pages laissent entendre qu'elle est également disponible sur SQL2008R2, mais je n'en ai pas sous la main pour vérifier si c'est le cas.
Exemple d'utilisation (heure et date australiennes) :
FORMAT(VALUE,'dd/MM/yyyy h:mm:ss tt')
Soit Cast
soit Convert
:
Syntaxe pour CAST
:
CAST (expression AS data_type [(longueur)])
Syntaxe pour CONVERT
:
CONVERT (data_type [(longueur)], expression [, style])
http://msdn.microsoft.com/en-us/library/ms187928.aspx
En fait, puisque vous avez demandé un format spécifique:
REPLACE(CONVERT(varchar(10), Date, 102), '.', '-')
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.
1 votes
CONVERT
, consultez la documentation MSDN.3 votes
Soyez conscient que YYYY-MM-DD est ambigu, selon les paramètres de votre langue. il est préférable d'utiliser la norme ISO YYYYMMDD, voir cet article de blog