Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General » SQL Server »

Problemas para convertir campo varchar(50) a datetime

Estas en el tema de Problemas para convertir campo varchar(50) a datetime en el foro de SQL Server en Foros del Web. Hola Tengo un campo varchar(50) donde tengo almacenado datos en formato fecha hora, es decir: 16/11/2011 13:25, estoy tratando convertir este campo a datetime y ...
  #1 (permalink)  
Antiguo 17/03/2011, 08:31
 
Fecha de Ingreso: febrero-2010
Mensajes: 105
Antigüedad: 14 años, 2 meses
Puntos: 1
Problemas para convertir campo varchar(50) a datetime

Hola
Tengo un campo varchar(50) donde tengo almacenado datos en formato fecha hora, es decir: 16/11/2011 13:25, estoy tratando convertir este campo a datetime y me este error : "Conversion failed when converting datetime from character string"

Como es posible solucionarlo? Tambien podria la posiblidad de extraer este campo y mandarlo a otro que fuera datetime?

Alguna sugerencia?

Saludos.
  #2 (permalink)  
Antiguo 17/03/2011, 10:39
Avatar de Libras
Colaborador
 
Fecha de Ingreso: agosto-2006
Ubicación: En la hermosa perla de occidente
Mensajes: 7.412
Antigüedad: 17 años, 8 meses
Puntos: 774
Respuesta: Problemas para convertir campo varchar(50) a datetime

y si pruebas 11/16/2011 13:25??

saludos!
__________________
What does an execution plan say to t-sql query? Go f**k yourself, if you are not happy with me
  #3 (permalink)  
Antiguo 17/03/2011, 14:29
Colaborador
 
Fecha de Ingreso: enero-2007
Ubicación: México
Mensajes: 2.097
Antigüedad: 17 años, 3 meses
Puntos: 447
Respuesta: Problemas para convertir campo varchar(50) a datetime

Hola fernan2010

Hay varias formas de hacer esta conversión, una de las más comunes es separar la fecha y la hora, convertir por partes y sumar los resultados, es decir algo como esto:

Código SQL:
Ver original
  1. DECLARE @VARCHAR VARCHAR(50)
  2. SET @VARCHAR = '16/11/2011 13:25'
  3.  
  4. SELECT @VARCHAR,
  5. CONVERT(datetime, SUBSTRING(@VARCHAR, 1, 10), 103) + CONVERT(datetime, SUBSTRING(@VARCHAR, 12, 5), 108) fecha

Te recuerdo que el estilo 103 para la conversión de fechas corresponde a un formato 'dd/mm/yyyy' y el formato 108 para la hora tiene el formato 'hh:mi:ss' (por defecto se agrega ":00" segundos

Haz la prueba y nos comentas.
Leo.
  #4 (permalink)  
Antiguo 18/03/2011, 01:59
 
Fecha de Ingreso: febrero-2010
Mensajes: 105
Antigüedad: 14 años, 2 meses
Puntos: 1
Respuesta: Problemas para convertir campo varchar(50) a datetime

Gracias, pero no consigo hacerlo con el codigo que me has mandado.
Una pregunta, Es posible hacer esta convesion e insertar el campo ya convertido en otro campo nuevo de la base de datos.
  #5 (permalink)  
Antiguo 18/03/2011, 08:03
Colaborador
 
Fecha de Ingreso: enero-2007
Ubicación: México
Mensajes: 2.097
Antigüedad: 17 años, 3 meses
Puntos: 447
Exclamación Respuesta: Problemas para convertir campo varchar(50) a datetime

Hola fernan2010:

El ejemplo funciona correctamente pasa la fecha que pones de ejemplo ('16/11/2011 13:25')

Si al aplicarlo a tu consulta sigue marcando un error de conversión esto puede ser porque alguno de tus registros no tiene el formato que mencionaste al inicio. Igual y sería conveniente que primero verificaras con la función ISDATE si existe algún registro con la fecha o la hora no válidas, para corregir los registros o en su defecto excluirlos de la conversión. Puedes hacerlo más o menos así:

Código SQL:
Ver original
  1. SET LANGUAGE spanish
  2. DECLARE @fechas TABLE (fecha VARCHAR(50))
  3. INSERT INTO @fechas VALUES ('16/11/2011 13:25') --fecha valida y hora valida
  4. INSERT INTO @fechas VALUES ('29/02/2011 13:25') --fecha no valida y hora valida
  5. INSERT INTO @fechas VALUES ('28/02/2011 25:25') --fecha valida y hora no válida
  6. INSERT INTO @fechas VALUES ('30/02/2011 25:25') --fecha no valida y hora no válida
  7. SELECT fecha,
  8. isdate(SUBSTRING(fecha, 1, 10)) fecha_valida,
  9. isdate(SUBSTRING(fecha, 12, 5)) hora_valida FROM @fechas

al inicio especifico que el lenguaje por defecto en español, para que reconozca el formato de fecha dd/mm/yyyy. El resultado de esta consulta es el siguiente:

Código:
fecha|fecha_valida|hora_valida
------------------------------------------
16/11/2011 13:25|1|1
29/02/2011 13:25|0|1
28/02/2011 25:25|1|0
30/02/2011 25:25|0|0
Con respecto a tu pregunta, si es posible hacer la conversión y copiar el resultado en una nueva columna, pero para poder aplicarlo a todos los registros es necesario que TODOS LOS REGISTROS tengan fechas válidas.

Saludos y espero que te sea de ayuda el código.
Leo.
  #6 (permalink)  
Antiguo 22/03/2011, 14:42
Avatar de iislas
Colaborador
 
Fecha de Ingreso: julio-2007
Ubicación: Mexico, D.F.
Mensajes: 6.482
Antigüedad: 16 años, 9 meses
Puntos: 180
Respuesta: Problemas para convertir campo varchar(50) a datetime

Se pudo solucionar desde un inicio, si en lugar de utilizar VARCHAR(50), utilizas su correspondiente DATETIME
__________________
MCTS Isaias Islas
  #7 (permalink)  
Antiguo 22/03/2011, 16:05
Colaborador
 
Fecha de Ingreso: enero-2007
Ubicación: México
Mensajes: 2.097
Antigüedad: 17 años, 3 meses
Puntos: 447
Respuesta: Problemas para convertir campo varchar(50) a datetime

De acuerdo contigo Iislas, pero el problema es que en muchas ocasiones no estás involucrado en el proceso de Diseño de la BD y te toca corregir lo que está mal hecho... en lo particular me ha tocado remodelar BD que perecieran diseñadas de tal manera que ejemplifican todo lo que no se tiene que hacer. Casi podría apostar que este es uno de esos casos. De cualquier manera el compañero fernan2010 no se ha tomado la molestia en hacer ningún comentario, ojalá que haya podido encontrar una solución.

Saludos
Leo.

Etiquetas: datetime, varchar, campos
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 00:38.