apoyandome un poco en la función que cita gnzsoloyo te pongo un ejemplo de los cambios:
Código mysql:
Ver original+----------------------------+-------------+-------------+
| nombre | ape_paterno | ape_materno |
+----------------------------+-------------+-------------+
| orozco jaramillo daniel
| NULL | NULL | | jaramillo ledesma santiago
| NULL | NULL | | lobo echeverry juan manuel
| NULL | NULL | +----------------------------+-------------+-------------+
Query OK, 0 rows affected (0.00 sec)
Query OK, 3 rows affected (0.00 sec)
+--------------+-------------+-------------+
| nombre | ape_paterno | ape_materno |
+--------------+-------------+-------------+
| daniel | orozco | jaramillo |
| santiago | jaramillo | ledesma |
| juan manuel | lobo | echeverry |
+--------------+-------------+-------------+
La consulta limpia sería:
Código sql:
Ver originalUPDATE nombres SET
ape_paterno=SUBSTRING(nombre,1,locate(' ',SUBSTRING_INDEX(nombre,' ',2),1)),
ape_materno=SUBSTRING(SUBSTRING_INDEX(nombre,' ',2),
locate(' ',SUBSTRING_INDEX(nombre,' ',2),1)+1),
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