2012-08-23 11 views
8

Estoy tratando de completar los datos de table1 a table2, ambos tienen el mismo número de columnas.Cómo convertir varchar a datetime en T-SQL?

Todas las columnas en table1 son del tipo varchar. Las columnas de table2 podrían ser varchar, int o datetime, etc.

Mi pregunta es cómo hacer la conversión durante el poblamiento?

Esta es una consulta de muestra que escribí. Extraño la parte para hacer la conversión. También el formato de mi datetime es mm/dd/yyyy hh:mm:ss.

insert into table2 
    select s.acty_id, s.notes_datetime, s.notes_data 
    from table1 t right join table2 s 
    on (t.acty_id =s.acty_id and t.notes_datetime =s.notes_datetime) 
    where t.acty_id is null 

Respuesta

11

va a utilizar un CAST() o CONVERT() en su campo:

Declare @dt varchar(20) 
set @dt = '08-12-2012 10:15:10' 
select convert(datetime, @dt, 101) 

Para su consulta que hacer lo siguiente:

insert into table2 
select s.acty_id, s.notes_datetime, s.notes_data 
from table1 t 
right join table2 s 
    on t.acty_id =s.acty_id 
    and convert(datetime, t.notes_datetime, 101) = s.notes_datetime 
where t.acty_id is null 
+0

Lo sentimos, no vio su edición, pero un par de cosas: tabla1 es donde existe el varchar, no tabla2, y debe hacer un reparto * seguro *, por lo que debe usar convertir con un estilo que coincida con el formato de cadena (m/d/y) para que no tenga problemas en un sistema que no sea inglés estadounidense o con diferente configuración de sesión. –

+0

@ AaronBertrand Cogí el varchar en table1 y lo edité para corregir ese error. Demasiados table1, table2's. También tiene razón sobre el formato de conversión correcto ... como siempre – Taryn

+0

No estoy seguro de entender la primera parte. ¿puedes explicar? ¿esto funcionara? insertar en la Tabla2 seleccione s.acty_id, convertir (fecha y hora, s.notes_datetime, s.notes_data, 101), s.notes_data de tabla1 t unen derecho Tabla2 s \t en t.acty_id = s.acty_id \t y convertir (datetime, t.notes_datetime, 101) = s.notes_datetime donde t.acty_id es nulo – GLP

5

La respuesta correcta es corregir tabla1 de manera que está utilizando los tipos de datos correctos. Mientras tanto, suponiendo que se necesita para que coincida con la fecha y hora tanto, puede intentar esto:

and CONVERT(DATETIME, t.notes_datetime, 101) = s.notes_datetime