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')
Question
Cosme Ferreira
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 to comment
Share on other sites
0 answers to this question
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.