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

Dividir nombre apellido

Estas en el tema de Dividir nombre apellido en el foro de SQL Server en Foros del Web. Hola buen dia a todos, de nuevo aqui dando un poco de lata. Mi problema es que voy a llenar una tabla a partir de ...
  #1 (permalink)  
Antiguo 04/11/2010, 18:20
 
Fecha de Ingreso: octubre-2010
Mensajes: 31
Antigüedad: 14 años, 1 mes
Puntos: 0
Pregunta Dividir nombre apellido

Hola buen dia a todos, de nuevo aqui dando un poco de lata.

Mi problema es que voy a llenar una tabla a partir de los datos de otra tabla, en la tabla origen tengo el campo nombre pero esta completo, (nombre, apellido paterno, apellido materno), y en la destino estara dividido una columna nombre, otra columna apellido paterno y otro campo apellido materno, por lo cual tengo que dividir la columna de la primer tabla. se me ocurre recorrer de la cadena con un substring e ir detectando los espacios en blanco, e aqui mi problema como recorro la cadena y detecto el espacio en blanco. estoy trabajando con sql server 2008.

de antemano muchas gracias
  #2 (permalink)  
Antiguo 04/11/2010, 20:13
Avatar de flaviovich  
Fecha de Ingreso: agosto-2005
Ubicación: Lima, Peru
Mensajes: 2.951
Antigüedad: 19 años, 3 meses
Puntos: 39
Respuesta: Dividir nombre apellido

No puedes hacerlo asi. Que hay de los apellidos compuestos?
__________________
No repitamos temas, usemos el Motor de busquedas
Plantea bien tu problema: Ayúdanos a ayudarte.
  #3 (permalink)  
Antiguo 04/11/2010, 21:50
 
Fecha de Ingreso: octubre-2010
Mensajes: 31
Antigüedad: 14 años, 1 mes
Puntos: 0
Respuesta: Dividir nombre apellido

no entendi lo que me preguntas :(, haber si me explico, en un campo tengo 'Torres Galicia Luis Alberto', y ese nombre lo quiero dividir en 3 columnas en otra tabla que quede 'Torres' 'Galicia' Luis Alberto' e aqui el motivo que se me ocurrio lo de los espacios en blanco para detectar si tiene uno o dos nombres. entonces no se si en sql se pueda detectar cuando es un espacio en blanco.


De antemano muchas gracias.
  #4 (permalink)  
Antiguo 05/11/2010, 00:40
Avatar de iislas
Colaborador
 
Fecha de Ingreso: julio-2007
Ubicación: Mexico, D.F.
Mensajes: 6.482
Antigüedad: 17 años, 4 meses
Puntos: 180
Respuesta: Dividir nombre apellido

Esto ya lo hemos platicado hasta el cansancio de los dedos !!! (al aplicar los teclasos como ahora).

Me explico, a ver que harias si tu nombre viene asi:

Torres Galicia Luis Alberto

R= tomo como base, los espacios (clap, clap, clap, aplausos)

Pero !!! y si viente asi:

Luis Alberto Torres Galicia

R= mmmm, mmmmm, mmmmm ((%"(#"&"#(")#/"#&("%/"#)

Y algo mas sorprendente:

Jose de Jesus Maria de las Heras de la Garza

R= mmmm, mmmmm, mmmmm ((%"(#"&"#(")#/"#&("%/"#)

O bien, algo un poco mas complicado

Franz Beckeng Bahuer Solis Hidalgo

(Hay papas, que a sus hijos, les ponen los nombres -incluidos los apellidos- de sus "idolos")

¿Tons?, como le hacemos...........................................

¿No me crees?

Tengo un sobrino que se llama: ERNESTO GUEVARA ISLAS GONZALEZ

Ernesto Guevara (el nombre del Che Guevara)
Islas, por su papa
Gonzalez, por la mama

Como dijo Mauricio Garces, "arrrrrroooooooozzzzzzzzzzzzzzz"
__________________
MCTS Isaias Islas
  #5 (permalink)  
Antiguo 05/11/2010, 07:49
Avatar de flaviovich  
Fecha de Ingreso: agosto-2005
Ubicación: Lima, Peru
Mensajes: 2.951
Antigüedad: 19 años, 3 meses
Puntos: 39
Respuesta: Dividir nombre apellido

Lo que hicimos en mi empresa fue contratar los servicios de una empresa que hace ese tipo de trabajo. Ellos tienen bases de datos de todos los ciudadanos del país, donde ya tienen todos los datos separados en campos. Obviamente la búsqueda se hace por el documento de identidad, porque pueden haber homónimos.
__________________
No repitamos temas, usemos el Motor de busquedas
Plantea bien tu problema: Ayúdanos a ayudarte.
  #6 (permalink)  
Antiguo 05/11/2010, 10:44
 
Fecha de Ingreso: octubre-2010
Mensajes: 31
Antigüedad: 14 años, 1 mes
Puntos: 0
Respuesta: Dividir nombre apellido

bueno ntes que nada gracias por su respuesta, por lo que respecta a mi problema, no me interesa si esta primero el nombre el apellido, lo que necesito es sacar de la primer palabra 1 caracter caracteres, de la segunda 2 caracteres y de la tercera 1 caracter. no se si asi se pueda que ahi de convertir la cadena en char y desues buscar el valor del espacio en codigo ascii y tomar el valor siguiente, no se si estoy fantasiando mucho.

muchas gracias
  #7 (permalink)  
Antiguo 05/11/2010, 11:56
Avatar de iislas
Colaborador
 
Fecha de Ingreso: julio-2007
Ubicación: Mexico, D.F.
Mensajes: 6.482
Antigüedad: 17 años, 4 meses
Puntos: 180
Respuesta: Dividir nombre apellido

No, asi como lo explicas es tan sencillo como que utilices la "descomposicion" de la cadena, tomando el primer "blanco" o espacio, y tomes con SUBSTRING el dato, cortes la cadena y hagas lo mismo con el siguiente "blanco".

Pero no inmiscuyas NOMBRE, APELLIDO PATERNO, APELLIDO MATERNO, porque volvemos a empezar.....
__________________
MCTS Isaias Islas
  #8 (permalink)  
Antiguo 05/11/2010, 14:25
 
Fecha de Ingreso: octubre-2010
Mensajes: 31
Antigüedad: 14 años, 1 mes
Puntos: 0
Respuesta: Dividir nombre apellido

El problema es que no tengo ni la menor idea de como detectar un "blanco" o espacio, si me pudieras dar alguna orientacion te lo agraeceria mucho
  #9 (permalink)  
Antiguo 05/11/2010, 14:41
Colaborador
 
Fecha de Ingreso: enero-2007
Ubicación: México
Mensajes: 2.097
Antigüedad: 17 años, 10 meses
Puntos: 447
Respuesta: Dividir nombre apellido

Hola luisalberto_tg, para obtener la primera aparición de cierto caracter utilizas la función CHARINDEX... dale un vistazo a tu ayuda en línea para que veas cómo funciona, en el ejemplo utilizo la función SUBSTRING para cortar la cadena de ejemplo desde la posición inicial hasta la primer aparición de un espacio en blanco

Código SQL:
Ver original
  1. DECLARE @Cadena VARCHAR(50)
  2. SET @Cadena = 'Hola mundo'
  3. SELECT SUBSTRING(@Cadena, 1, charindex(' ', @Cadena) - 1)

De tal manera que el resultado será la palabra "Hola". También puedes checar esta página

http://geekswithblogs.net/AngelEyes/...12/111504.aspx

Esta función equivale a hacer un split de una cadena. igual y también te puede servir para lo que quieres hacer.

saludos
Leo
  #10 (permalink)  
Antiguo 08/11/2010, 16:11
 
Fecha de Ingreso: octubre-2010
Mensajes: 31
Antigüedad: 14 años, 1 mes
Puntos: 0
Información Respuesta: Dividir nombre apellido

Muchas gracias por la ayuda. pero ya solucione el proble para ir tomando los campos de una cadena, les dejo el codigo una pequeña contribucion, creo que nos puede ser muy util en cualquier momento, ya nadamas es cuestion de irla adaptando a nuestras necesidades.

declare
@ubicacion int, @indice int,
@cadena varchar (30),
@campo1 varchar(20),
@campo2 varchar(20),
@campo3 varchar(20),

set @cadena='casa grande verde'
SET @indice = 1
SET @ubicacion = CHARINDEX(' ', @cadena, @indice)

set @campo1= (SUBSTRING(@cadena, @indice, @ubicacion - @indice))
SET @indice = @ubicacion + 1
set @ubicacion= @ubicacion + 1
SET @ubicacion = CHARINDEX(' ', @cadena, @indice)
set @campo2= SUBSTRING(@cadena, @indice, @ubicacion - @indice)
set @campo3=SUBSTRING(@cadena, @ubicacion + 1, @indice + 1)


print @campo1
print @campo2
print @campo3


con eso ya estamos guardando los resultados en las variables y las podemos utilizar como querramos


bueno muchas gracias a todos por su ayuda y espero que les sea de utilidad
  #11 (permalink)  
Antiguo 20/05/2011, 10:49
 
Fecha de Ingreso: mayo-2011
Mensajes: 1
Antigüedad: 13 años, 6 meses
Puntos: 0
Respuesta: Dividir nombre apellido

declare
@ubicacion int, @indice int,
@cadena varchar (30),
@campo1 varchar(20),
@campo2 varchar(20),
@campo3 varchar(20)

set @cadena='casa grande verde'
SET @indice = 1
SET @ubicacion = CHARINDEX(' ', @cadena, @indice)

set @campo1= (SUBSTRING(@cadena, @indice, @ubicacion - @indice))
SET @indice = @ubicacion + 1
set @ubicacion= @ubicacion + 1
SET @ubicacion = CHARINDEX(' ', @cadena, @indice)
set @campo2= SUBSTRING(@cadena, @indice, @ubicacion - @indice)
set @campo3=SUBSTRING(@cadena, @ubicacion + 1, @indice + 1)


print @campo1
print @campo2
print @campo3



me podrian ayudar con esto, si separa los campos, pero como lo podria aplicar a una tabla ejemplo


select distinct
(SH.custid), BL2.custid,
MDCA.zfuture01 as APELLIDO_PATERNO,
MDCA.zfuture02 as APELLIDO_MATERNO,
MDCA.zfuture03 as NOMBRE,
MDCA.zfuture07 as FECHA_DE_NACIMIENTO,
rfc as RFC,
MDCA.sexo as SEXO,
BL2.domicilio as DIRECCIÓN_CALLE_NÚMERO,
MDCA.colonia as COLONIA_O_POBLACIÓN,
MDCA.municipio as DELEGACIÓN_O_MUNICIPIO,
CU.billcity as CIUDAD,
CU.billstate as ESTADO,
CU.billzip as CP,
CU.phone as TELÉFONO,
CU.s4future01 as NÚMERO_CUENTA,
'I' as TIPO_RESPONSABILIDAD_CUENTA,
'I' as TIPO_CUENTA,
'AF' as TIPO_CONTRATO,
CU.BILLCOUNTRY as MONEDA,
'W' as FRECUENCIA_DE_PAGOS,
BL2.Fechafactura as FECHA_APERTURA,
SH.CuryTotOrd as MONTO_A_PAGAR,
BL2.FechaProxPagoUltPago as FECHA_ÚLTIMO_PAGO,
BL2.Fechafactura as FECHA_ÚLTIMA_COMPRA,
SH.CuryTotOrd as CREDITO_MAXIMO,
SH.CuryTotOrd as SALDO_ACTUAL

from md_vwbaselistado2 BL2 JOIN SOHEADER SH ON SH.CUSTID = BL2.CUSTIDSINDV
join Mdcustadic MDCA on MDCA.CUSTID = SH.CUSTID
join md_clienteRFC CRFC on CRFC.CUSTID = SH.CUSTID
join customer CU on CU.CUSTID = MDCA.CUSTID

where SH.CUSTID = '320870' and BL2.Fechafactura in
(
select max(BL2.Fechafactura)
from md_vwbaselistado2 BL2
where BL2.custidsindv = SH.CUSTID
)

donde quiero que "NOMBRE" sea separado x que no lo esta y me diga el primero en una columna y lo demas en otra.

maria del rocio de jesus

columna"PRIMER_NOMBRE" ------------- columna"segundo_nombre
resultado: maria -------------- resultado: del rocio de jesus


alguien me podria ayudar, gracias.

Última edición por rrubbens; 20/05/2011 a las 10:51 Razón: para que se entienda mejor

Etiquetas: dividir, subcadena, cadenas
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 09:21.