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

De VARCHAR a TIME_STAMP sin perder datos

Estas en el tema de De VARCHAR a TIME_STAMP sin perder datos en el foro de Mysql en Foros del Web. Hola amigos, bueno.... mi consulta es bastante corta. Dentro de una tabla tengo una columna llamada "fecha" pero por error mas que nada he guardado ...
  #1 (permalink)  
Antiguo 05/09/2008, 20:30
 
Fecha de Ingreso: febrero-2007
Ubicación: Panamá
Mensajes: 50
Antigüedad: 17 años, 2 meses
Puntos: 1
De VARCHAR a TIME_STAMP sin perder datos

Hola amigos, bueno.... mi consulta es bastante corta.

Dentro de una tabla tengo una columna llamada "fecha" pero por error mas que nada he guardado los datos dentro de la tabla como VARCHAR con el formato (d/m/yy) y no como TIME_STAMP. El problema es que necesito por obligación que la columna este en TIME_STAMP (YYYY-MM-DD HH:MM:SS) por lo que quisiera saber si es posible pasar de la primera columna a la segunda columna sin perder los datos actuales?

Si tienen alguna idea de hacerlo, se los agradecería notablemente a todos.

Muchas gracias de antemano.
  #2 (permalink)  
Antiguo 06/09/2008, 07:40
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Cáceres
Mensajes: 3.735
Antigüedad: 16 años
Puntos: 300
Respuesta: De VARCHAR a TIME_STAMP sin perder datos

Claro que se puede:
Imagino que las fechas las incluyes así: 3/2/08 para tres de febrero de 2008, y 4/12/97 para cuatro de diciembre de 1997.
Usaré la función substring_index, pero la misma sólo funciona con versiones recientes de MySQL. No sé cuál usas tú.

Imaginemos que el campo donde tienes la fecha metida como texto se llama fechatexto, y que tu tabla se llama tabla.

Primer paso
Crear un campo tipo timestamp al que llamarás fechatimestamp

Segundo paso:
Haces esta consulta de selección para ver si las fechas salen bien. Controla que todas las fechas tengan las dos barras de separación y los números bien.
SELECT fechatexto, CAST(CONCAT(IF(substring_index(fechatexto,'/',-1) > 9, CONCAT('19', substring_index(fechatexto,'/',-1) ), CONCAT('20', substring_index(fechatexto,'/',-1))),'-',substring_index(substring_index(fechatexto,'/',2),'/',-1),'-',substring_index(fechatexto,'/',1)) AS DATE) FROM tabla

Tercer paso
Si todo ha ido bien, lanzas la siguiente consulta de actualización:
UPDATE tabla SET fechatimestamp = CAST(CONCAT(IF(substring_index(fechatexto,'/',-1) > 9, CONCAT('19', substring_index(fechatexto,'/',-1) ), CONCAT('20', substring_index(fechatexto,'/',-1))),'-',substring_index(substring_index(fechatexto,'/',2),'/',-1),'-',substring_index(fechatexto,'/',1)) AS DATE)

Luego, tras comprobar que todo está bien, puedes eliminar el campo fechatexto.

Y ya tendrás lo que quieres.

Última edición por jurena; 06/09/2008 a las 07:58
  #3 (permalink)  
Antiguo 06/09/2008, 13:54
 
Fecha de Ingreso: febrero-2007
Ubicación: Panamá
Mensajes: 50
Antigüedad: 17 años, 2 meses
Puntos: 1
Respuesta: De VARCHAR a TIME_STAMP sin perder datos

probare luego y te dire si me funciona.

De antemano muchisimas gracias por tu ayuda :)
  #4 (permalink)  
Antiguo 08/09/2008, 10:17
Avatar de Genetix  
Fecha de Ingreso: febrero-2002
Ubicación: Lima - Perú
Mensajes: 1.600
Antigüedad: 22 años, 2 meses
Puntos: 45
Respuesta: De VARCHAR a TIME_STAMP sin perder datos

Hola
Te paso otra forma de hacerlo, suponiendo que la fecha lo tienes así [dd/mm/yy]
Voy a basarme en la estructura que puso nuestro amigo Jurena



UPDATE tabla SET fechatimestamp = STR_TO_DATE(replace(fechatexto,'/','.'),GET_FORMAT(DATE,'EUR'))



Saludos!
__________________
"El conocimiento nos hace responsables."
twitter: @benjamingb
blog personal: http://codigolinea.com
ZF Manual en español http://manual.zfdes.com
  #5 (permalink)  
Antiguo 08/09/2008, 11:58
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Cáceres
Mensajes: 3.735
Antigüedad: 16 años
Puntos: 300
Respuesta: De VARCHAR a TIME_STAMP sin perder datos

amigo Genetix,
Tu propuesta es simple y por simple magnifica. Sólo habría que controlar el hecho de que el año parece haberlo guardado con dos cifras. No sé si convertirá 08 a 2008 y 97 a 1997. Habría que ver el modo de introducir los cambios antes de pasar a la función GET_FORMAT(DATE...). Pero creo que hacerlo como propones, añadiendo, eso sí, el cambio de dos cifras a cuatro del año, sería lo mejor.
  #6 (permalink)  
Antiguo 08/09/2008, 12:39
Avatar de Genetix  
Fecha de Ingreso: febrero-2002
Ubicación: Lima - Perú
Mensajes: 1.600
Antigüedad: 22 años, 2 meses
Puntos: 45
Respuesta: De VARCHAR a TIME_STAMP sin perder datos

Cita:
No sé si convertirá 08 a 2008 y 97 a 1997.
Jurena la función GET_FORMAT funciona tanto con el año en 2 cifras como con 4 cifras, y lo va introducir como la fecha standar de mysql, osea 01/01/87 lo va introducir 1987-01-01.

Saludos!
__________________
"El conocimiento nos hace responsables."
twitter: @benjamingb
blog personal: http://codigolinea.com
ZF Manual en español http://manual.zfdes.com
  #7 (permalink)  
Antiguo 08/09/2008, 12:43
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Cáceres
Mensajes: 3.735
Antigüedad: 16 años
Puntos: 300
Respuesta: De VARCHAR a TIME_STAMP sin perder datos

Pues si es así, esa es la buena.
Saludos, Genetix
  #8 (permalink)  
Antiguo 13/09/2008, 09:48
 
Fecha de Ingreso: febrero-2007
Ubicación: Panamá
Mensajes: 50
Antigüedad: 17 años, 2 meses
Puntos: 1
Respuesta: De VARCHAR a TIME_STAMP sin perder datos

Disculpen por la tardanza en contestar... creo q he tenido una de las semanas mas locas...

Acabe de probar la ide de Genetix y funciona a la perfección!

Muchisimas gracias amigos!
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 17:15.