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
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


0