SQL - Separar campo de nombre

   
Vista:

Separar campo de nombre

Publicado por Malvarador (6 intervenciones) el 06/05/2010 23:18:10
Hola ,primeramente gracias por leer mi mensaje:

Alguien me puede ayudar o ha hecho algún procedimiento en el cual yo tengo por ejemplo mi campo de Nombre "Juan Carlos" y lo que necesito es partir esta cadena a fin de q me quede almacenado en dos campos, tal como se muestra:

Campo 1 : Juan
Campo 2 : Carlos

Por lo anterior necesito que al momento de que encuentre "espacios" mueva este valor.

Gracias de antemano por su ayuda.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:Separar campo de nombre

Publicado por Leonardo Josue (877 intervenciones) el 07/05/2010 17:05:44
Buenas tardes Malvarador:

Aquí hay varias cuestiones que hay que revisar primero. debes considerar que un nombre puede estar compuesto por más de dos elementos, por ejemplo:

Juan Carlos Alfonso Víctor María de Borbón y Borbón-Dos Sicilias (Rey Juan Carlos de España)

Dado es variable el número de campos que puedes tener, yo te recomendaría que en lugar de manejarlo como culumnas lo manejes como renglones, es decir, para el ejemplo deberías generar una función que te regrese una tabla más o menos así:

Nombres
-----------------------------
Juan
Carlos
Alfonso
Victor
María

Hace tiempo me encontré una función para hacer el split a cadenas y hasta la fecha me ha servido bastante bien. Igual y te puede servir.

CREATE FUNCTION dbo.fnSplit
(
@sInputList VARCHAR(8000), -- Cadena
@sDelimiter VARCHAR(8000) = ',' -- Separador
)
RETURNS @List TABLE (item VARCHAR(8000))
BEGIN
DECLARE @sItem VARCHAR(8000)
WHILE CHARINDEX(@sDelimiter,@sInputList,0) <> 0
BEGIN
SELECT
@sItem=RTRIM(LTRIM(SUBSTRING(@sInputList,1,CHARINDEX(@sDelimiter,@sInputList,0)-1))),
@sInputList=RTRIM(LTRIM(SUBSTRING(@sInputList,CHARINDEX(@sDelimiter,@sInputList,0)+LEN(@sDelimiter),LEN(@sInputList))))
IF LEN(@sItem) > 0
INSERT INTO @List SELECT @sItem
END
IF LEN(@sInputList) > 0
INSERT INTO @List SELECT @sInputList -- Put the last item in
RETURN
END

Para probar la función tendrías que hacer algo como esto

Select * from dbo.fnSplit('Juan Carlos Alfonso Víctor María', ' ')

Esta función es válida para SQL Server, si utilizas algún otro manejador de BD sería cuestión de hacer algo similar.

Saludos y espero que te pueda servir el código
Leo.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Separar campo de nombre

Publicado por Malvarador (6 intervenciones) el 07/05/2010 17:19:55
Leonardo, muchas gracias por tomarte un tiempo y aclarar mi duda.

Pondré a prueba el código y tienes razón ... no había contemplado los escenarios cuando existe más de un nombre en el mismo campo.

Saludos,
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar