2009-07-03 9 views
1

J'ai un type de champ varchar dans le serveur sql. Il contient des données telles que "010109" etc.Sql Server DATETIME format incorrrect

Lorsque j'essaye de convertir ceci en DATETIME il renvoie une valeur "9 Jan 2001" quand la valeur réelle devrait être "1 janvier 2009".

Quelqu'un at-il une solution pour cela?

Merci pour votre aide.

+1

"SQL Server format DATETIME * incorrrect *" Oh l'ironie ... – voyager

Répondre

2

Je pensais qu'il y aurait un format de conversion pour que vous puissiez mettre:

select(convert(datetime,'010109',<some magic number>)) 

et obtenir le résultat, mais je ne peux pas sembler trouver celui qui donne la bonne date :(

Cette fonctionne, mais est assez méchant:

declare @dt varchar(6) 
select @dt = '010109' 
select convert(datetime,RIGHT(@dt,2) + SUBSTRING(@dt,3,2) + LEFT(@dt,2)) 

Yeesh

+0

Même solution que je suis venu avec. Nasty en effet, être intéressant de voir s'il y en a un plus agréable là-bas :) –

+1

+1 - on dirait que c'est le chemin à parcourir. J'ajouterais la spécification de format (12) pour être du bon côté – kristof

1

Lorsque vous tapez date t il forme de « xxxxxx », il semble que SQLServer assumess est un format ISO YYMMDD et en tant que tel ne soit pas affecté par le SET DATEFORMAT

Je connaissais 2 ces formats - ce qu'on appelle les formats sûrs

  • ISO: AAAAMMJJ
  • ISO8601: aaaa-mm-jjThh: mi: SS.mmm

mais il semble que yYMMDD est également ISO - vérifier BOL Styles Date et Heure - Format 12

Cela expliquerait pourquoi la solution affichée par Scorpio n'a pas fonctionné

Vous pouvez utiliser la solution fournie par butter chicken avec la spécification de format (12) sur un côté sûr:

declare @dt varchar(6) 
select @dt = '010109' 
select convert(datetime,RIGHT(@dt,2) + SUBSTRING(@dt,3,2) + LEFT(@dt,2),12) 

Si possible, je serait idéal si vous pouviez changer la colonne datetime évite des surprises similaires à l'avenir

-1

SQL Server s'attend à la date à être au format AMJ

donc, si votre chaîne était comme ça « 090101 » vous obtiendrait la bonne date.

select(convert(datetime,'090101',104)) 

Vous devrez donc sous-traiter les pièces et exécuter la conversion.

Questions connexes