J'ai une colonne qui a la date des valeurs stockées dans varchar (format JJMMAA) comme celui-ciSQL Server: problème de conversion de date?
231280
121280
131185
...
Comment convertir ces valeurs en datetime type de données?
J'ai une colonne qui a la date des valeurs stockées dans varchar (format JJMMAA) comme celui-ciSQL Server: problème de conversion de date?
231280
121280
131185
...
Comment convertir ces valeurs en datetime type de données?
Set DateFormat DMY
GO
Select Cast(Stuff(Stuff(SomeValue, 3, 0, '-'), 6, 0, '-') As datetime)
From MyData
Parce que ce format est non standard, utilisez
DECLARE @field char(6)
SET @field = '231280'
select convert(datetime, right(@field, 2) + substring(@field, 3, 2) + left(@field, 2) , 12)
Le construit le code des chaînes dans le mauvais ordre provoquant une erreur, mais l'idée de base était juste. J'ai corrigé le code et testé pour m'assurer que cela fonctionne. – JohnFx
@JohnFx Je l'ai édité 5 secondes après l'avoir posté. J'ai nommé mon édition, "Doh". Puis, 9 minutes plus tard, vous avez fait la même chose :( – GSerg
Utilisez substring pour obtenir l'année, le mois et le jour, si l'année supérieure à 11 ajouter 19 si pas ajouter 20, pour obtenir l'année en format 2009 , mais ceci est votre requête juste au lieu de chaîne ajoutez votre nom de colonne
select CAST(
CASE WHEN CAST(SUBSTRING('231280', 5, 2) AS INT) >11
THEN '19'+SUBSTRING('231280', 5, 2)
else '20'+SUBSTRING('231280', 5, 2)
END
+'-'+SUBSTRING('231280', 3, 2)+'-'+SUBSTRING('231280', 1, 2) as datetime)
Il faudrait utiliser des jeux de jambes de sous-chaîne pour convertir votre chaîne en date format connue. Voici un exemple convertir la chaîne en forme 3, « British/français »:
declare @YourTable table (YourColumn varchar(50))
insert @YourTable
select '231280'
union all select '121280'
union all select '131185'
select convert(datetime, substring(YourColumn,1,2) + '/' +
substring(YourColumn,3,2) + '/' + substring(YourColumn,5,2), 3)
from @YourTable
Merci d'avoir donné un bon exemple! – jrara
En utilisant cette solution, devrais-je toujours mettre dateformat en DMY avant l'exécution? – jrara
@jara - Oui car il assure que Cast interprète la position du mois et jour correctement indépendant du format de date par défaut sur le serveur – Thomas
@jara - Sans DateFormat, sur une machine/serveur US par exemple, il voudrait interpréter la date comme MM-DD-YY au lieu de DD-MM-YY . – Thomas