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

Carga De Datos En Mysql

Estas en el tema de Carga De Datos En Mysql en el foro de Bases de Datos General en Foros del Web. Mis saludos, una consulta. Tengo una archivo *.txt con 100 reg por ejemplo y las columnas estan separadas por (\t), lo que hago a traves ...
  #1 (permalink)  
Antiguo 09/09/2004, 11:49
 
Fecha de Ingreso: agosto-2004
Mensajes: 44
Antigüedad: 19 años, 9 meses
Puntos: 0
Carga De Datos En Mysql

Mis saludos, una consulta. Tengo una archivo *.txt con 100 reg por ejemplo y las columnas estan separadas por (\t), lo que hago a traves de un script *.php uso la funcion:
LOAD DATA INFILE "directorio/archivo.txt" INTO TABLE MITABLA FIELDS TERMINATED BY '\t' IGNORE 1 LINES

No tengo ningun problema con esto, mis datos cargan normal a mi tabla, el detalle es, tengo una columna del tipo fecha en ese archivo *.txt que tiene el formato dd-mm-yyyy hh:mm:ss y en mi tabla mysql los campos fecha tienen el formato yyyy-mm-dd hh:mm:ss, como se daran cuenta tengo una incompatibilidad de formatos fechas que al hacer la carga a mi tabla se generan ciertos errores.

Que solucion podria aplicar ya que esto debe ser automatizado, sin la intervencion manual del usuario para cambiar el formato del archivo *.txt. Se me ocurre usar dos tablas una para almacenar temporalmente la fecha como viene en un campo varchar y luego mediante script pasarlo a la tabla correspondiente de mi tabla mysql.
__________________
SEGUIR CON LO BUENO, MEJORAR LO QUE SE DEBA Y CREAR LO QUE SE PUEDA.
  #2 (permalink)  
Antiguo 09/09/2004, 15:14
Avatar de BrujoNic
Super Moderador
 
Fecha de Ingreso: noviembre-2001
Ubicación: Costa Rica/Nicaragua
Mensajes: 16.935
Antigüedad: 22 años, 5 meses
Puntos: 655
Algunas soluciones:
1) Modificar la aplicación que genera el archivo txt para que genere la fecha a como la interpreta MySQL. Si estas usando un XBase (Clipper, Fox, Dbase, etc) podrías cambiar el SET DATE al formato gringo de AAAA-MM-DD para que no toques la programación. De lo contrario entras a la lógica y haces dicho cambio.

2) Modificar en MySQL el campo fecha a texto para que no pierda la información. Agregar al final de la tabla el campo fecha, realizar la carga y por medio de PHP convertir el campo texto donde se almacenó la fecha del archivo y convertirla a la fecha a como la maneja MySQL en el último campo.

Yo preferiría el punto 1, cambiar el programa que genera el txt.
__________________
La tecnología está para ayudarnos. No comprendo el porqué con esa ayuda, la gente escribe TAN MAL.
NO PERDAMOS NUESTRO LINDO IDIOMA ESPAÑOL
  #3 (permalink)  
Antiguo 09/09/2004, 15:35
 
Fecha de Ingreso: agosto-2004
Mensajes: 44
Antigüedad: 19 años, 9 meses
Puntos: 0
Claro el item 1 es el mas facil pero el detalle radica en q el sistema que genera ese archivo txt es ajeno a mi area y veo complicada el apoyo en este aspecto.

El tema se orienta a hacer un artificio como indicas en el paso 2, por consiguiente tendre q aplicar una logica ya que no encuentro un medio automatico para realizar dicha conversion de formato.

Por ahi lei hace tiempo una manera de conectarse a la base de datos, estableciendo como parametro SET LOCALE("arg","arg") en relidad no tengo clara la funcion pero la voy a buscar y la posteo, se me ocurre q es una solucion ya que en esa funcion le indicas si elijes EUROPEO,AMERICANO,...
Aqui esta lo encontre:
setlocale (LC_TIME,$var);
__________________
SEGUIR CON LO BUENO, MEJORAR LO QUE SE DEBA Y CREAR LO QUE SE PUEDA.

Última edición por Gecko; 09/09/2004 a las 15:39
  #4 (permalink)  
Antiguo 09/09/2004, 16:11
Avatar de BrujoNic
Super Moderador
 
Fecha de Ingreso: noviembre-2001
Ubicación: Costa Rica/Nicaragua
Mensajes: 16.935
Antigüedad: 22 años, 5 meses
Puntos: 655
Ok, aplica la segunda opción de cambiar el tipo de datos de tus campos fecha a texto y dejar al final los nuevos campos fechas de mysql.

Cuando uses el INFILE por cada línea leida del archivo txt, va a llenar los campos necesarios, o sea, si cada línea de tu txt tiene por ejemplo 10 campos separados por tab y tu tabla en MySQL tiene 12, solo los 10 primeros van a ser cargados y los 2 últimos van con valor nulo. Es por eso que podrías aplicar lógica después de cargado todo para convertirlo directamente de la tabla.

Si esa tabla es acumulativa, es mejor crear una temporal para bajar la información y luego pasarla con las fechas buenas a la que va a tener todo para que no sea pesado el proceso.
__________________
La tecnología está para ayudarnos. No comprendo el porqué con esa ayuda, la gente escribe TAN MAL.
NO PERDAMOS NUESTRO LINDO IDIOMA ESPAÑOL
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 15:21.