Ver Mensaje Individual
  #6 (permalink)  
Antiguo 23/10/2009, 12:39
Avatar de huesos52
huesos52
Colaborador
 
Fecha de Ingreso: febrero-2009
Ubicación: Manizales - Colombia
Mensajes: 5.980
Antigüedad: 15 años, 3 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