2009-09-02 7 views
0

J'ai une table avec 5 millions d'enregistrements de dates stockés en tant que char (10) avec le format aaaa/mm/jj. Je dois convertir en datetime, donc je l'utilise:SQL Update varchar à date erreur

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 à un type de données datetime donné une valeur hors de portée valeur." Maintenant, j'ai essayé de corriger les données pour que cela ne se produise pas - pas "yyyy" en dessous de 1900 ou plus de 2000, pas de "dd" au dessus de 30 (28 pour février), pas de "mm" au dessus de 12 ou ci-dessous 0. Aucune valeur NULL.

La conversion échoue toujours.

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

E.g. quelque chose comme:

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

Merci Karl

+0

Certains mois ont 31 jours dans - J'espère que vous n'avez pas brisé vos données: S –

+0

Aussi, il n'y a pas de mois zéro - mois devrait être 1-12 inclusivement. –

Répondre

1

les opérations suivantes:

SET DATEFORMAT YMD; 

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

Cela convertira ceux qui sont reconnus comme des valeurs date/heure valide, le reste sera laissé en l'état.

0

insérer la date dans les paramètres de format AAAAMMJJ ou l'utilisation et vous n'aurez pas ce problème. ou effectuez l'une des opérations suivantes

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

Le style de conversion 103 gère une date dans le format jj/mm/aaaa. Utilisez plutôt le style de conversion 111 pour gérer le format aaaa/mm/jj.

+0

Merci d'avoir signalé cela! – Karl