Quebrar string utilizando separadores

Bom, eu estava precisando de um script que fizesse a mesma situação que a função EXPLODE do PHP, mas que a mesma funcionasse no SQL Server. Então, procurando na internet achei esta função:

CREATE FUNCTION EXPLODE ( @String varchar(8000), @Separador varchar(8000), @PosBusca int )
RETURNS varchar(8000)
AS BEGIN
   
    DECLARE @Index int, @Max int, @Retorno varchar(8000)

    DECLARE @Partes as TABLE ( Id_Parte int identity(1,1), Texto varchar(8000) )

    SET @Index = charIndex(@Separador,@String)

    WHILE (@Index > 0) BEGIN   
        INSERT INTO @Partes SELECT SubString(@String,1,@Index-1)
        SET @String = Rtrim(Ltrim(SubString(@String,@Index+Len(@Separador),Len(@String))))
        SET @Index = charIndex(@Separador,@String)
    END

    IF (@String != '') INSERT INTO @Partes SELECT @String

    SELECT @Max = Count(*) FROM @Partes

    IF (@PosBusca = 0) SET @Retorno = Cast(@Max as varchar(5))
    IF (@PosBusca < 0) SET @PosBusca = @Max + 1 + @PosBusca
    IF (@PosBusca > 0) SELECT @Retorno = Texto FROM @Partes WHERE Id_Parte = @PosBusca

    RETURN RTRIM(LTRIM(@Retorno))

END
GO

Com isto, podemos pegar um registro separado por um determinado caracter. Para utilizar basta fazer assim:

DECLARE @VARIAVEL VARCHAR(MAX)
SET @VARIAVEL = 'Testando|a|função|acima|mesmo
SELECT dbo.EXPLODE(@VARIAVEL , '|', 1) -- Vai imprimir na tela 'Testando'
SELECT dbo.EXPLODE(@VARIAVEL , '|', 5) -- Vai imprimir na tela 'mesmo'

Gostou da dica? Comente e compartilhe

0 Comentários