0 votes

Erreur de mise à jour de SQL varchar en date

J'ai une table avec 5 millions d'enregistrements de dates stockées sous forme de char(10) avec le format yyyy/mm/dd. J'ai besoin de les convertir en datetime, donc j'utilise :

 UPDATE [Database].[dbo].[Table]
    SET [DoB]=convert(datetime,[DoBText],103)
 GO

Mais je reçois l'erreur :

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

J'ai essayé de corriger les données pour que cela ne se produise pas - c'est-à-dire pas de "yyyy" inférieur à 1900 ou supérieur à 2000, pas de "dd" supérieur à 30 (28 pour février), pas de "mm" supérieur à 12 ou inférieur à 0. Pas de NULLs.

La conversion échoue toujours.

Y a-t-il un moyen de permettre à SQL d'ignorer la conversion en cas d'erreur et de continuer ?

Par exemple, quelque chose comme :

  SET [DoB]= try to do [DoB]=convert(datetime,[DoBText],103) if fails SET [DoB] = NULL

Merci Karl

1voto

Guffa Points 308133

Le style de conversion 103 traite une date au format dd/mm/yyyy. Utilisez plutôt le style de conversion 111 pour traiter le format yyyy/mm/dd.

1voto

Timothy Walters Points 8222

Essayez ce qui suit :

SET DATEFORMAT YMD;

UPDATE [Database].[dbo].[Table]
SET [DoB]=[DoBText]
WHERE ISDATE( [DoBText] ) = 1

Cela convertira celles qui sont reconnues comme des valeurs de date/heure valides, le reste sera laissé tel quel.

0voto

Mladen Prajdic Points 10337

Insérez la date au format yyyyMMdd ou utilisez des paramètres et vous n'aurez pas ce problème. ou faites l'une des choses suivantes

SET DATEFORMAT DMY
SET DATEFORMAT MDY
SET DATEFORMAT YMD
SET DATEFORMAT YDM

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X