Ir para conteúdo
Fórum Script Brasil
  • 0

Função para Desmembrar String (dica)


Cosme Ferreira

Pergunta

Bom dia.

Segue uma outra função que utilizo bastante. Estive envolvido em um projeto que visava acompanhar a rota de vários caminhões através de informações geradas pelo Autotrac. Este sistema enviava as informações de latitude e longitude separados por ',' (virgula), as informações de estado (em movimento, parado para conferencia de carga, parada para higiene, etc...) vinham em outro campo separados por ':' (dois pontos). Era muito chato ficar desmembrando estas informações que a cada momento vinham de uma forma.

Para isso, escrevi a função fncDesmembraString (muito parecida com o sprit do C#).

A função pede dois parâmetros: quebra e texto.

A quebra, é o caractere utilizado para separar as informações contidas no texto. O retorno é exibido em forma de tabela.

Modo de utilização:

select * from dbo.fncSiDesmembraString(',','1,2,3,4,5,6')

Retorno:

parametro

---------

1

2

3

4

5

6

A função trabalha como se fosse uma tabela, podendo realizar Group, having, where, etc...

select COUNT(*) as qtd,

parametro

from dbo.fncSiDesmembraString(',','1,2,3,4,5,6,2,4,5,2')

group by parametro having COUNT(*) > 1

Retorno:

qtd parametro

----------- ----------

3 2

2 4

2 5

Segue o código:

CREATE FUNCTION [dbo].[fncSiDesmembraString]

(

@quebra char(1),

@Texto varchar(8000)

)

RETURNS @Tabretorno TABLE

(

parametro varchar(8000)

)

as

begin

Declare @tamanho int

set @tamanho = len(@Texto)

declare @posicao int,

@caracter char(1),

@cache varchar(8000)

set @posicao = 1

while @posicao <= @tamanho+1

begin

select @caracter = substring(@texto, @posicao,1)

if (@caracter = @quebra)

begin

--select @posicao , @tamanho

insert into @Tabretorno

values (@cache)

set @cache = ''

end

else if (@posicao = @tamanho + 1)

begin

insert into @Tabretorno

values (@cache)

end

else

begin

set @cache = isnull(@cache,'') + @caracter

--select @cache

end

set @posicao = @posicao + 1

end

return

end

Link para o comentário
Compartilhar em outros sites

0 respostass a esta questão

Posts Recomendados

Até agora não há respostas para essa pergunta

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,1k
    • Posts
      651,8k
×
×
  • Criar Novo...