2010-10-04 5 views
24

J'essaie de convertir une date en date-heure, mais je reçois des erreurs. Le type de données que je convertis est (float, null) et je voudrais le convertir en DATETIME.Convertir INT en DATETIME (SQL)

La première ligne de ce code fonctionne très bien, mais je reçois cette erreur sur la deuxième ligne:

Arithmetic overflow error converting expression to data type datetime. 


CAST(CAST(rnwl_efctv_dt AS INT) AS char(8)), 
CAST(CAST(rnwl_efctv_dt AS INT) AS DATETIME), 
+0

Quelle langue utilisez-vous ? Pouvez-vous nous montrer la (les) valeur (s) de rnwl_efctv_dt? –

Répondre

32

vous devez convertir en char d'abord parce que la conversion en int ajoute ces jours 1900-01-01

select CONVERT (datetime,convert(char(8),rnwl_efctv_dt)) 

voici quelques exemples

select CONVERT (datetime,5) 

1900-01-06 00: 00: 00.000

select CONVERT (datetime,20100101) 

coups, parce que vous ne pouvez pas ajouter 20100101 jours à 1900-01-01..you aller au-dessus de la limite

convertir char premier

declare @i int 
select @i = 20100101 
select CONVERT (datetime,convert(char(8),@i)) 
+0

Je le fais pour des centaines de milliers de lignes. Y a-t-il quelque chose que je dois surveiller? – Daniel

+0

Ou est-ce que je peux juste coller ceci juste au-dessus de mes moulages (dont l'un devient votre première déclaration de conversion)? – Daniel