2010-09-23 7 views
1

J'ai une table où, malheureusement, un certain nombre de dates sont stockées sous forme de chaînes.SQL Server 2008 VarChar à DateTime

J'ai un certain nombre de rapports qui les transtendent en datetimes et filtrent par eux. Cela fonctionnait bien jusqu'à aujourd'hui quand tout à coup je reçois cette erreur

"La conversion d'un type de données varchar en un type de données datetime a abouti à une valeur hors de portée."

Les dates sont toutes stockées dans le format "aaaa-mm-jj" et sont toutes valides.

Si je lance l'instruction SQL suivante

SELECT CAST('2010-06-02' AS DateTime) 

Je vous attendre à obtenir « 2010-06-02 » mais à partir d'aujourd'hui je reçois « 2010-02-06 » quelque chose a changé avec le façon SQL formats dates. J'ai jeté un oeil dans les paramètres régionaux sur le serveur et tout semble être correct.

Quoi d'autre pourrait être à l'origine de cela?

Répondre

0

Une façon non équivoque d'obtenir cette conversion est de faire la suivant:

SELECT CAST(replace('2010-06-02', '-', '') AS DateTime) 

et ce sera toujours interprété comme AAAAMMJJ, en ignorant la déclaration set dateformat ydm ou les paramètres culturels que la base de données a.

3

Essayez de régler le format explicitement

select convert(datetime, '2010-06-02',101) 
+0

@Gavin - il se peut que la langue ait été modifiée dans la base de données. http://msdn.microsoft.com/en-us/library/ms191448.aspx – codingbadger

+0

@Gavin - quelques informations supplémentaires sur la date et l'heure dans SQL Server http://msdn.microsoft.com/fr-fr/library/ms180878 .aspx – codingbadger

+0

@Gavin Draper Cette impression était proche de la réalité. C'est la chaîne de date sans trait d'union qui est interprétée en ignorant les paramètres de culture que vous pourriez avoir. –

0

Q1: Qu'est-ce d'autre pourrait être la cause?

local, vous êtes probablement sous la local101 (États-Unis) et placer les données de 103 (Colombie/Français)

Comme barry triste utilisation convert