SQL Server - Split SQL SERVER 2000

 
Vista:

Split SQL SERVER 2000

Publicado por Juan Alberto Lopez E. (1 intervención) el 29/06/2007 00:39:31
Estimado colegas le envio un pequeno aporte a la comunidad de programadores de SQL Server 2000.

Ejemplo:
Select dbo.fun_Split_name('JUAN ALBERTO LOPEZ ESPINOZA',0)
Resultado
JUAN
Select dbo.fun_Split_name('JUAN ALBERTO LOPEZ ESPINOZA',2)
Resultado
LOPEZ

Create FUNCTION dbo.fun_Split_name
(
@nombre varchar(255),
@Id int
)
RETURNS varchar(255)
AS
BEGIN
--Desarrollado por: Juan Alberto López E. (Ec.)
Declare @result varchar(255),
@TempVar varchar(1),
@TempVarTemp varchar(1),
@TempNumero int,
@TempNumeroNext int,
@Ban int,
@resultado varchar(255),
@position int,
@Ban1 int

SET @position = 1
Set @TempNumero = 0
Set @TempNumeroNext = 0
SET @resultado = ''
SET @Ban = 0
SET @Ban1 = 0

set @result = LTRIM(RTRIM(@nombre))
set @result = UPPER(@result)
--Print @result

WHILE @position <= DATALENGTH(@result)
BEGIN
SELECT @TempNumero= ASCII(SUBSTRING(@result, @position, 1))
SELECT @TempVar= CHAR(ASCII(SUBSTRING(@result, @position, 1)))
SET @position = @position + 1

if(@Id = 0)
Begin

If ((@TempNumero>=65 and @TempNumero <=90)or @TempNumero in (209)) --45(-)47(/)209 (Ñ)48-57(0...9)65-90(A...Z)32('')
Begin
SET @resultado = @resultado + @TempVar
SET @Ban = 1
End

if(@TempNumero = 32)
Set @position = DATALENGTH(@result)+1
End
Else
Begin
if(@TempNumero = 32 )
Begin
SELECT @TempNumeroNext= ASCII(SUBSTRING(@result, (@position + 1), 1))
SELECT @TempVarTemp= CHAR(ASCII(SUBSTRING(@result, @position + 1, 1)))
if(@TempNumeroNext <> 32)
Begin
SET @Ban1 = @Ban1 + 1

End

End
If (((@TempNumero>=65 and @TempNumero <=90)or @TempNumero in (209)) and ( @Ban1 = @Id) )
Begin
SET @resultado = @resultado + @TempVar
SET @Ban = 1
End
End
END


if (@Ban = 1)
Set @result= @resultado
Else
Set @result= null

Set @result = LTRIM(RTRIM(@result))

RETURN @result

END
GO
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:Split SQL SERVER 2000

Publicado por Isaias (3308 intervenciones) el 29/06/2007 00:57:36
Muy interesante, aunque para separar nombres, lo veo medio complicado, a menos que los apellidos y nombres vinieran completos, pero (siempre el PERO), ¿como saber cuantos nombres o apellidos tiene la cadena?

JUAN DE DIOS CASTRO Y CASTRO GONZALEZ
DE LA CONCHA GUTIERREZ ALFREDO EMILIO FRANCISCO

Son nombres de TELENOVELA.

Saludos y gracias por la aportacion.
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:Split SQL SERVER 2000

Publicado por Pedro (1 intervención) el 18/07/2007 19:39:37
Hay possibilidad de retornar @result sin el UPPER?

Gracias
Pedro
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:Split SQL SERVER 2000

Publicado por Diego Correa (1 intervención) el 11/11/2008 18:31:52
Excelente Sr., muy útil tu aporte, me sirvió un montón.

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

Split SQL SERVER 2000

Publicado por Marcelo Ortiz (1 intervención) el 15/05/2012 22:42:51
Excelente aporte. Muchas gracias. Me funcionó perfectamente para separar apellidos de una BDD.
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