Je veux sélectionner value = 201301
select getdate(), cast(datepart(year, getdate()) as varchar(4))+cast(datepart(MONTH, getdate()) as varchar(2))
il retourne 20131
quelle est la façon normale de faire cela?
SELECT LEFT(CONVERT(varchar, GetDate(),112),6)
SELECT CONVERT(nvarchar(6), GETDATE(), 112)
En fait, ceci est le moyen approprié d’obtenir ce que vous voulez, à moins que vous ne puissiez utiliser MS SQL 2014 (qui permet enfin de créer des chaînes de format personnalisées pour la date et l’heure).
Pour obtenir yyyymm
au lieu de yyyym
, vous pouvez utiliser ce petit truc:
select
right('0000' + cast(datepart(year, getdate()) as varchar(4)), 4)
+ right('00' + cast(datepart(month, getdate()) as varchar(2)), 2)
C'est plus rapide et plus fiable que de récupérer des parties de convert(..., 112)
.
Vous pouvez convertir votre date dans de nombreux formats, par exemple:
CONVERT(NVARCHAR(10), DATE_OF_DAY, 103) => 15/09/2016
CONVERT(NVARCHAR(10), DATE_OF_DAY, 3) => 15/09/16
Syntaxe:
CONVERT('TheTypeYouWant', 'TheDateToConvert', 'TheCodeForFormating' * )
Dans votre cas, je viens de convertir et restreindre la taille de nvarchar (6) comme ceci:
CONVERT(NVARCHAR(6), DATE_OF_DAY, 112) => 201609
Plus d’informations sur: http://www.w3schools.com/sql/func_convert.asp
Une méthode plus efficace, qui utilise un calcul mathématique entier plutôt que des chaînes/varchars, produira un type int plutôt qu'un type chaîne:
SELECT YYYYMM = (YEAR(GETDATE()) * 100) + MONTH(GETDATE())
Ajoute deux zéros au côté droit de l'année, puis ajoute le mois aux deux zéros ajoutés.