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

Separar Palabras en cadenas de texto sql server

Estas en el tema de Separar Palabras en cadenas de texto sql server en el foro de SQL Server en Foros del Web. 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 ...
  #1 (permalink)  
Antiguo 10/12/2009, 22:25
 
Fecha de Ingreso: diciembre-2009
Mensajes: 14
Antigüedad: 14 años, 4 meses
Puntos: 0
Exclamación 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!!!
  #2 (permalink)  
Antiguo 11/12/2009, 12:49
Avatar de iislas
Colaborador
 
Fecha de Ingreso: julio-2007
Ubicación: Mexico, D.F.
Mensajes: 6.482
Antigüedad: 16 años, 9 meses
Puntos: 180
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.
  #3 (permalink)  
Antiguo 11/12/2009, 13:23
 
Fecha de Ingreso: diciembre-2009
Mensajes: 14
Antigüedad: 14 años, 4 meses
Puntos: 0
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!!!
  #4 (permalink)  
Antiguo 11/12/2009, 17:25
Avatar de iislas
Colaborador
 
Fecha de Ingreso: julio-2007
Ubicación: Mexico, D.F.
Mensajes: 6.482
Antigüedad: 16 años, 9 meses
Puntos: 180
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.
  #5 (permalink)  
Antiguo 11/12/2009, 17:51
 
Fecha de Ingreso: diciembre-2009
Mensajes: 14
Antigüedad: 14 años, 4 meses
Puntos: 0
Respuesta: Separar Palabras en cadenas de texto sql server

Tienes razón!! es muy facil! muchas gracias por tu ayuda!!!
  #6 (permalink)  
Antiguo 03/07/2011, 21:02
 
Fecha de Ingreso: octubre-2010
Mensajes: 2
Antigüedad: 13 años, 6 meses
Puntos: 0
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
  #7 (permalink)  
Antiguo 15/11/2012, 07:33
 
Fecha de Ingreso: noviembre-2012
Mensajes: 1
Antigüedad: 11 años, 5 meses
Puntos: 0
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
  #8 (permalink)  
Antiguo 16/11/2012, 12:31
Avatar de iislas
Colaborador
 
Fecha de Ingreso: julio-2007
Ubicación: Mexico, D.F.
Mensajes: 6.482
Antigüedad: 16 años, 9 meses
Puntos: 180
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....
__________________
MCTS Isaias Islas
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 01:23.