Retornar campo separado por Pipe

,

Dada um registro com vários campos separado por pipe (ex.

|I051|10||3.01.01.01.03.03.00|) podemos obter o valor entre os pipes passando o registro e o número do campo conforme abaixo:

SELECT dbo.bpo_retorna_campo_geral('|I051|10||3.01.01.01.03.03.00|',3) AS 'valor'

Neste caso obtemos como retorno o valor 10, pois é o valor imediatamente antes do 3.o pipe.

SELECT dbo.bpo_retorna_campo_geral('|I051|10||3.01.01.01.03.03.00|',5) AS 'valor' o retorno será o valor 3.01.01.01.03.03.00

CREATE FUNCTION [dbo].[bpo_retorna_campo_geral](@list VARCHAR(255),@nro_campo int)
RETURNS VARCHAR(255)
AS
BEGIN
        declare @campo varchar(255)
        declare @conta int,@iPos1 int,@iPos2 int
        select @conta=1
      DECLARE @pos int,@nextpos int,@valuelen int
        SELECT @pos = 0, @nextpos = 1

        WHILE @nextpos > 0
        BEGIN
            SELECT @nextpos = charindex('|', @list, @pos + 1)
            if (@conta=@nro_campo-1) select @iPos1=@nextpos
            if (@conta=@nro_campo) select @iPos2=@nextpos
            SET @conta=@conta+1
            SELECT @pos = @nextpos
        END
        select @campo=substring(@list,@iPos1+1,@iPos2-@iPos1-1)
        return (@campo)
END

Rate

3 (2)

Share

Share

Rate

3 (2)