Foros del Web

Foros del Web (http://www.forosdelweb.com/)
-   SQL Server (http://www.forosdelweb.com/f87/)
-   -   Separar Palabras en cadenas de texto sql server (http://www.forosdelweb.com/f87/separar-palabras-cadenas-texto-sql-server-760835/)

gaviota81 10/12/2009 22:25

Separar Palabras en cadenas de texto sql server
 
Hola, soy nueva en esto del sql... tengo un conflicto para separar el nombre de los apellidos, en una tabla tengo un campo que trae el nombre con los apellidos juntos y debo de tomar la primer palabra para nombre, la segunda para Apellido Paterno y la tercera para Apellido Materno, esto sin importar si en verdad cada palabra corresponde a ese orden, primero lo resuelvo de esta forma:

-Primero separo el nombre de los apellidos:

Update Tabla set NombreCotitular = LEFT(nombre, ISNULL(NULLIF(CHARINDEX(' ', nombre) - 1, -1), LEN(nombre)))

Update Tabla set Apellidos = SUBSTRING(nombre, CHARINDEX(' ', nombre) + 1, LEN(nombre))


-Despues separo los apellidos

Update tabla set ApellidoPatCotitular = LEFT(Apellidos, ISNULL(NULLIF(CHARINDEX(' ', Apellidos) - 1, -1), LEN(Apellidos)))

Update tabla set ApellidoMatCotitular=SUBSTRING(Apellidos, CHARINDEX(' ', Apellidos) + 1, LEN(Apellidos))


Lo hace bien cuando se tienen solo 3 cadenas, como por ejemplo

Nombre ApellidoPat ApellidoMat
Juan Perez Perez

Pero cuando se tienen más de tres cadenas no se como solo indicarle que para el apellido materno solo tome la segunda palabra de los apellidos hasta el espacio.

¿Me pueden ayudar a agregarle a este update que solo me tome hasta donde se termina la segunda palabra?

Update tabla set ApellidoMatCotitular=SUBSTRING(Apellidos, CHARINDEX(' ', Apellidos) + 1, LEN(Apellidos))


Muchas gracias!!!

iislas 11/12/2009 12:49

Respuesta: Separar Palabras en cadenas de texto sql server
 
Esto se ha platicado en este foro y es CASI IMPOSIBLE de resolver, ante la gran diversidad de nombres de personas, ¿ejemplo?

Juan Luis Armando de Los Santos y Cobos
Maria Guadalupe Reyna Gonzalez Chavez
Felipe de Jesus de todos los santos Calderon Hinojosa (jajaja)

etc.

gaviota81 11/12/2009 13:23

Respuesta: Separar Palabras en cadenas de texto sql server
 
Jaja.. muy buenos tus ejemplos...

Si, sé que es imposible descifrar esto.. pero lo que necesito es solo de una cadena tomar solo las tres primeras palabras ( no importa si corresponden a nombre y apellidos o no)

La primer parte del nombre y apellidos ya lo tengo... pero si quiero solo tomar la segunda palabra de los apellidos no se como hacerlo...

Solo tengo este update... pero me trae todo el resto de la cadena a partir de la segunda palabra:

Update tabla set ApellidoMatCotitular=SUBSTRING(Apellidos, CHARINDEX(' ', Apellidos) + 1, LEN(Apellidos))


Pero solo quiero q me tome la segunda palabra hasta el espacio, sabes si hay alguna forma de obtenerlo??

Mil gracias por tu apoyo y tiempo!!!

iislas 11/12/2009 17:25

Respuesta: Separar Palabras en cadenas de texto sql server
 
Debes "jugar" en "quitar" de tu cadena principal, lo que deseas, te pongo un ejmplo

"Juan Carlos Roman Sanchez"

Primero "saco" a "JUAN"

SELECT SUBSTRING(CADENA, 1, CHARINDEX(' ', CADENA) - 1) -- = Juan

Ahora, resto esto que acabo de quitar

SET CADENA = SUBSTRING(CADENA, CHARINDEX(' ', CADENA) +1) , LEN(CADENA))

Asi, hasta que concluyas con "sacar" lo que deseas de tu cadena.

gaviota81 11/12/2009 17:51

Respuesta: Separar Palabras en cadenas de texto sql server
 
Tienes razón!! es muy facil! muchas gracias por tu ayuda!!!

adriankair 03/07/2011 21:02

Respuesta: Separar Palabras en cadenas de texto sql server
 
A veces la solución mas sencilla es l mas funcional...Lo unico q tienes q hacer es guardar el archivo que tienes en excel con formato texto unicode. Lo abres desde Excel yelijes la opcion delimitados y le das siguiente, eliejes la opcion espacio y tabulador, le das siguiente y le das texto y finalizar
Y listo, espero que te haya servido

jjmobo_02 15/11/2012 07:33

Respuesta: Separar Palabras en cadenas de texto sql server
 
Caballero para poder separar una cadena que tiene todo el nombre
primer apellido
segundo apellido
primer nombre
segundo nombre

select
Name
,LEFT((SUBSTRING((SUBSTRING(Name, CHARINDEX(' ', Name) + 1, LEN(Name))), CHARINDEX(' ', (SUBSTRING(Name, CHARINDEX(' ', Name) + 1, LEN(Name)))) + 1, LEN((SUBSTRING(Name, CHARINDEX(' ', Name) + 1, LEN(Name)))))), ISNULL(NULLIF(CHARINDEX(' ', (SUBSTRING((SUBSTRING(Name, CHARINDEX(' ', Name) + 1, LEN(Name))), CHARINDEX(' ', (SUBSTRING(Name, CHARINDEX(' ', Name) + 1, LEN(Name)))) + 1, LEN((SUBSTRING(Name, CHARINDEX(' ', Name) + 1, LEN(Name))))))) - 1, -1), LEN((SUBSTRING((SUBSTRING(Name, CHARINDEX(' ', Name) + 1, LEN(Name))), CHARINDEX(' ', (SUBSTRING(Name, CHARINDEX(' ', Name) + 1, LEN(Name)))) + 1, LEN((SUBSTRING(Name, CHARINDEX(' ', Name) + 1, LEN(Name)))))))))
,LEFT((SUBSTRING((SUBSTRING((SUBSTRING(Name, CHARINDEX(' ', Name) + 1, LEN(Name))), CHARINDEX(' ', (SUBSTRING(Name, CHARINDEX(' ', Name) + 1, LEN(Name)))) + 1, LEN((SUBSTRING(Name, CHARINDEX(' ', Name) + 1, LEN(Name)))))), CHARINDEX(' ', (SUBSTRING((SUBSTRING(Name, CHARINDEX(' ', Name) + 1, LEN(Name))), CHARINDEX(' ', (SUBSTRING(Name, CHARINDEX(' ', Name) + 1, LEN(Name)))) + 1, LEN((SUBSTRING(Name, CHARINDEX(' ', Name) + 1, LEN(Name))))))) + 1, LEN((SUBSTRING((SUBSTRING(Name, CHARINDEX(' ', Name) + 1, LEN(Name))), CHARINDEX(' ', (SUBSTRING(Name, CHARINDEX(' ', Name) + 1, LEN(Name)))) + 1, LEN((SUBSTRING(Name, CHARINDEX(' ', Name) + 1, LEN(Name))))))))), ISNULL(NULLIF(CHARINDEX(' ', (SUBSTRING((SUBSTRING((SUBSTRING(Name, CHARINDEX(' ', Name) + 1, LEN(Name))), CHARINDEX(' ', (SUBSTRING(Name, CHARINDEX(' ', Name) + 1, LEN(Name)))) + 1, LEN((SUBSTRING(Name, CHARINDEX(' ', Name) + 1, LEN(Name)))))), CHARINDEX(' ', (SUBSTRING((SUBSTRING(Name, CHARINDEX(' ', Name) + 1, LEN(Name))), CHARINDEX(' ', (SUBSTRING(Name, CHARINDEX(' ', Name) + 1, LEN(Name)))) + 1, LEN((SUBSTRING(Name, CHARINDEX(' ', Name) + 1, LEN(Name))))))) + 1, LEN((SUBSTRING((SUBSTRING(Name, CHARINDEX(' ', Name) + 1, LEN(Name))), CHARINDEX(' ', (SUBSTRING(Name, CHARINDEX(' ', Name) + 1, LEN(Name)))) + 1, LEN((SUBSTRING(Name, CHARINDEX(' ', Name) + 1, LEN(Name)))))))))) - 1, -1), LEN((SUBSTRING((SUBSTRING((SUBSTRING(Name, CHARINDEX(' ', Name) + 1, LEN(Name))), CHARINDEX(' ', (SUBSTRING(Name, CHARINDEX(' ', Name) + 1, LEN(Name)))) + 1, LEN((SUBSTRING(Name, CHARINDEX(' ', Name) + 1, LEN(Name)))))), CHARINDEX(' ', (SUBSTRING((SUBSTRING(Name, CHARINDEX(' ', Name) + 1, LEN(Name))), CHARINDEX(' ', (SUBSTRING(Name, CHARINDEX(' ', Name) + 1, LEN(Name)))) + 1, LEN((SUBSTRING(Name, CHARINDEX(' ', Name) + 1, LEN(Name))))))) + 1, LEN((SUBSTRING((SUBSTRING(Name, CHARINDEX(' ', Name) + 1, LEN(Name))), CHARINDEX(' ', (SUBSTRING(Name, CHARINDEX(' ', Name) + 1, LEN(Name)))) + 1, LEN((SUBSTRING(Name, CHARINDEX(' ', Name) + 1, LEN(Name))))))))))))
,LEFT(Name, ISNULL(NULLIF(CHARINDEX(' ', Name) - 1, -1), LEN(Name)))
,LEFT((SUBSTRING(Name, CHARINDEX(' ', Name) + 1, LEN(Name))), ISNULL(NULLIF(CHARINDEX(' ', (SUBSTRING(Name, CHARINDEX(' ', Name) + 1, LEN(Name)))) - 1, -1), LEN((SUBSTRING(Name, CHARINDEX(' ', Name) + 1, LEN(Name))))))
from
CCCCCC

iislas 16/11/2012 12:31

Respuesta: Separar Palabras en cadenas de texto sql server
 
Favor de NO REVIVIR temas ya antiguos, ademas de que tu propuesta es simplemente con REGLAS de como debe venir el nombre y en esto estriba la problemática, que no las hay....


La zona horaria es GMT -6. Ahora son las 05:02.

Desarrollado por vBulletin® Versión 3.8.7
Derechos de Autor ©2000 - 2025, Jelsoft Enterprises Ltd.