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

Metido en un gran problema

Estas en el tema de Metido en un gran problema en el foro de Bases de Datos General en Foros del Web. Muchachos espero su gran ayuda de todos los sabios de este foro me pueda ayudar a solucionar los siguiente En la tabla clientes existe el ...
  #1 (permalink)  
Antiguo 23/10/2009, 09:40
 
Fecha de Ingreso: septiembre-2009
Mensajes: 281
Antigüedad: 14 años, 7 meses
Puntos: 0
Pregunta Metido en un gran problema

Muchachos espero su gran ayuda de todos los sabios de este foro me pueda ayudar a solucionar los siguiente

En la tabla clientes existe el campo nombres que guardaban todo el nombre completo por ejemplo asi DAZA MARTINES JUAN

Ahora lo q quieren es separa el apellido paterno, materno y nombres en tres campos distintos, para esto es la misma tabla añadi dos campos mas q son paterno, materno
La pregunta ahora es como debo proceder para truncar el campo nombres y separar en los tres campos. La ventaja q tengo es que en el campo nombres todos los datos empiezan con los dos apellidos primero y luego los nombre

Espero una ayuda se q es dificial pero haber
  #2 (permalink)  
Antiguo 23/10/2009, 09:45
Avatar de huesos52
Colaborador
 
Fecha de Ingreso: febrero-2009
Ubicación: Manizales - Colombia
Mensajes: 5.980
Antigüedad: 15 años, 2 meses
Puntos: 360
Respuesta: Metido en un gran problema

en que base de datos trabajas?
__________________
Without data, You are another person with an opinion.
W. Edwads Deming
  #3 (permalink)  
Antiguo 23/10/2009, 09:47
 
Fecha de Ingreso: septiembre-2009
Mensajes: 281
Antigüedad: 14 años, 7 meses
Puntos: 0
Respuesta: Metido en un gran problema

La base de datos esta elabaorada en mysql
  #4 (permalink)  
Antiguo 23/10/2009, 10:16
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 5 meses
Puntos: 2658
Respuesta: Metido en un gran problema

Estás metido en un brete bastante complicado, pero si dices que todos los nombres están con dos apelidos primero y los nombres después, la solución podría ser usar SUBSTRING_INDEX():

Código sql:
Ver original
  1. SELECT
  2.   SUBSTRING_INDEX('CAMPOS LOPEZ LUIS MARIA',' ',2),
  3.   SUBSTRING_INDEX('CAMPOS LOPEZ LUIS MARIA',' ',-2);
Esto daría por resultado:
Cita:
Apellido, Nombre
'CAMPOS LOPEZ', 'LUIS MARIA'
La función es SUBSTRING_INDEX(str, delim, count) , donde str es la cadena o campo a procesar, delim es el caracter que se busca como divisor (en este caso un espacio), y count representa la posición de repetición que se busca, cuando hay más de una (en este caso es la segunda aparición). Cuando el valor de count es positivo se devuelve todo lo que hay a la izquierda del delim, cuando es negativo, lo que está a la derecha.

Nota: SI aparecen apellidos compuestos (como De la Huerta, Del Solar, Torres y De la Puerta, por citar algunos que recuerdo), estos se deberán procesar aparte, porque no cumplen las generales.
Por eso digo que el brete es complicado.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #5 (permalink)  
Antiguo 23/10/2009, 10:25
 
Fecha de Ingreso: septiembre-2009
Mensajes: 281
Antigüedad: 14 años, 7 meses
Puntos: 0
Pregunta Respuesta: Metido en un gran problema

Nadie tiene alguna sugerencia encontre esto en la red pero no me guio bien espero q me pueda ayudar

Encontre este codigo en la red pero la verdad tengo un poco de temor antes de ejecutarlo en mi base de datos espero me ppuedan guiar en esto
Tengo un campo nombre dende los datos estan ASI DAZA MARTINEZ JUAN Y QUIERO LLEVAR A mi nuevos dos campos PATERNO Y MATERNO ASI
nombre= JUAN
paterno= DAZA
MATERNO=MARTINEZ


select Nombre(NombreApelido) as Nombre, Apellido(NombreApelido) as Apellido
from tabla
into table newtabla

Function Nombre()
Parameters Cadena
Nombre= Substr(Cadena, AT(',',Cadena), Len(Cadena))
Return Nombre

Function Apellido()
Parameters Cadena
Apellido= Substr(Cadena, 1, AT(',',Cadena))
Return Apellido


ESPERO QUE ME PUEDAN GUIAR SI ESTE CODIGO ES CORRECTO Y ME AYUDEN A MODIFCAR ??
Muchas Gracias de antemano

Gracias gnzsoloyo envia esto antes de que leyera tu post intetare hacer lo q dices

Última edición por vili86; 23/10/2009 a las 10:28 Razón: falta de razones
  #6 (permalink)  
Antiguo 23/10/2009, 12:39
Avatar de huesos52
Colaborador
 
Fecha de Ingreso: febrero-2009
Ubicación: Manizales - Colombia
Mensajes: 5.980
Antigüedad: 15 años, 2 meses
Puntos: 360
Respuesta: Metido en un gran problema

apoyandome un poco en la función que cita gnzsoloyo te pongo un ejemplo de los cambios:

Código mysql:
Ver original
  1. mysql> select *from nombres;
  2. +----------------------------+-------------+-------------+
  3. | nombre                     | ape_paterno | ape_materno |
  4. +----------------------------+-------------+-------------+
  5. | orozco jaramillo daniel    | NULL        | NULL        |
  6. | jaramillo ledesma santiago | NULL        | NULL        |
  7. | lobo echeverry juan manuel | NULL        | NULL        |
  8. +----------------------------+-------------+-------------+
  9. 3 rows in set (0.00 sec)
  10.  
  11. Query OK, 0 rows affected (0.00 sec)
  12.  
  13. mysql> update nombres set ape_paterno=substring(nombre,1,locate(' ',SUBSTRING_INDEX(nombre,' ',2),1)),
  14.     -> ape_materno=substring(SUBSTRING_INDEX(nombre,' ',2),locate(' ',SUBSTRING_INDEX(nombre,' ',2),1)+1),
  15.     -> nombre=replace(nombre,SUBSTRING_INDEX(nombre,' ',2),'');
  16. Query OK, 3 rows affected (0.00 sec)
  17. Rows matched: 3  Changed: 3  Warnings: 0
  18.  
  19. mysql> select *from nombres;
  20. +--------------+-------------+-------------+
  21. | nombre       | ape_paterno | ape_materno |
  22. +--------------+-------------+-------------+
  23. |  daniel      | orozco      | jaramillo   |
  24. |  santiago    | jaramillo   | ledesma     |
  25. |  juan manuel | lobo        | echeverry   |
  26. +--------------+-------------+-------------+
  27. 3 rows in set (0.00 sec)
  28.  
  29. mysql> commit;

La consulta limpia sería:
Código sql:
Ver original
  1. UPDATE nombres SET
  2. ape_paterno=SUBSTRING(nombre,1,locate(' ',SUBSTRING_INDEX(nombre,' ',2),1)),
  3. ape_materno=SUBSTRING(SUBSTRING_INDEX(nombre,' ',2),
  4. locate(' ',SUBSTRING_INDEX(nombre,' ',2),1)+1),
  5. nombre=REPLACE(nombre,SUBSTRING_INDEX(nombre,' ',2),'');

Donde nombre es el campo que incluye el nombre completo.

La observación que hace gnzsoloyo es importante. Apellidos con espacios (de montes, del solar etc.) separan mal los apellidos.

saludos
__________________
Without data, You are another person with an opinion.
W. Edwads Deming
  #7 (permalink)  
Antiguo 23/10/2009, 15:01
 
Fecha de Ingreso: septiembre-2009
Mensajes: 281
Antigüedad: 14 años, 7 meses
Puntos: 0
Respuesta: Metido en un gran problema

Quien dijo que no se podia hacer y estaba metido en un gran lio

muchisimas gracias a este foro sabia que podia confiar en los grandes sabios que hay aqui

resulto perfecto la consulta muchas gracias
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 07:09.