2011-01-10 3 views
1

J'ai un problème étrange. Je convertir une date en utilisant les éléments suivantsLa date de conversion SQL change l'heure

convert (varchar (64), table. [Date], 120) the_date

Maintenant, l'thig étrange est que si je ne cours pas la conversion le temps est par exemple 2011-01-10 13:10:01 mais si je cours la conversion le temps deviendra 2011-01-10 13:10:02. Comment se peut-il? Je cours seulement une conversion.

Mise à jour: La colonne est une colonne datetime. J'ai essayé de convertir en utilisant 121 mais le même problème. Si je liste la valeur non convertie avec le converti côte à côte dans SQL Server Enterprise Manager je reçois la différence sur une rangée ici et là. Il semble Enterprise Manager convertit aussi quand outputing pour la visualisation depuis si je récupérer les données en utilisant PHP et ne convertit pas, je vois que la colonne est enregistrée comme Jan 10 2011 3:31PM

Mise à jour: L'exécution de l'Analyseur de requêtes Je reçois

2011-01-05 10:49:48.557 2011-01-05 10:49:48 

Cela semble donc avoir été à l'origine de l'erreur. Vous n'avez pas vu d'erreurs tout en regardant rapidement dans le jeu de résultats maintenant. Pourquoi ne peut pas faire un logiciel qui fonctionne pour une fois? :)

+2

L'exécutez-vous une minute plus tard? –

+0

Peut-être que la conversion indique time = time + 1; : D –

+0

Quel type de données est la colonne? –

Répondre

3

Cette requête, exécutez par l'analyseur de requêtes, ou SSMS, renvoie les valeurs attendues:

select CONVERT(varchar(64),CONVERT(datetime,'2010-01-01T10:59:31.997'),120),CONVERT(datetime,'2010-01-01T10:59:31.997') 

2010-01-01 10:59:31 2010-01-01 10:59:31.997 

cours de la même grâce à Enterprise rendements Manager:

2010-01-01 10:59:31 01/01/2010 10:59:32 

C'est, gestionnaire de l'entreprise applique déjà mise en forme aux colonnes datetime, arrondit la sortie et masque les millisecondes. On ne devrait pas faire confiance à quoi que ce soit.

+0

bon appel. J'ai oublié comment les ordures sont EM – gbn

2

Arrondi. Il y a probablement aussi une valeur en millisecondes.

+2

J'ai pensé à cela, mais j'ai fait un test, et même si la valeur de la date se termine avec 997 millisecondes, je ne peux pas obtenir SQL pour arrondir la valeur des secondes. –

0

Montrez votre problème en utilisant

select table.[Date], CONVERT(varchar(64), table.[Date], 120) AS the_date from table 

et il pourrait y avoir un problème de conversion

0

Utilisation CONVERT (varchar (64), [Date],) pour préserver les millisecondes.

+0

J'ai essayé mais c'était un – inquam