Função para contar palavra
Gostaria de compartilhar com vocês um problema que tive de resolver a pouco tempo em um script SQL (que logo estarei postando para vocês esse script).
Enfim, meu problema era que precisava saber quantas vezes um determinado termo ou caracter aparecia em uma String. Precisava resolver esse problema através de uma função... por isso, segue abaixo um exemplo de solução:
Se alguém souber como resolver usando funções nativas do SQL Server, por favor, comentem a solução nesse post.
Bom, espero que tenham gostado!
Enfim, meu problema era que precisava saber quantas vezes um determinado termo ou caracter aparecia em uma String. Precisava resolver esse problema através de uma função... por isso, segue abaixo um exemplo de solução:
create function fc_conta_palavra(@palavra varchar(100),
@string varchar(max))
returns int
as
begin
-- declaração variáveis usadas na função
declare @contador int, @contadorpalavra int
--contador de quantas vezes apareceu a palavra
set @contadorPalavra = 0
--contador do loop
set @contador = 0
-- loop
while @contador <= len(@string)
begin
--se encontrar a palavra soma mais um para @contadorPalavra
set @contadorPalavra =
case when substring(@string, @contador, len(@palavra)) = @palavra
then @contadorPalavra + 1
else @contadorPalavra
end
--soma mais um ao contador do laço while
set @contador = @contador + 1
end
-- retorna valor
return @contadorPalavra
end
Se alguém souber como resolver usando funções nativas do SQL Server, por favor, comentem a solução nesse post.
Bom, espero que tenham gostado!
Segundo os princípios do comando em SQL Server acima, Eu não apenas passei mas também adaptando para funções nativas do Oracle, reescrevendo para melhor performance na busca das palavras sem as restrições que são geradas no SQL Server... =D
ResponderExcluirO código segui abaixo (espero que fique legível) :
CREATE OR REPLACE Function fc_conta_palavra(palavras in nvarchar2,
frase in long)
return number as
-- declaração variáveis usadas na função
contador number(10) := 0; --contador do loop
contadorpalavra number(10) := 0; --contador de quantas vezes apareceu a palavra
textoatual long := frase; -- texto restante
valorcorrente number(10) := 0; -- possição atual;
-- loop
begin
while contador <= length(frase) loop
--se encontrar a palavra soma mais um para contadorPalavra
valorcorrente := INSTR(textoatual, palavras);
if valorcorrente <= length(textoatual) and valorcorrente != 0 then
contadorPalavra := contadorPalavra + 1;
contador := valorcorrente + length(palavras); -- transfere valor
textoatual := substr(textoatual, contador);
else
contador := length(frase) + 1;
end if;
end loop;
-- retorna valor
return contadorpalavra;
end;
-- valeu ai galera...
Obrigado pela contribução Matheus!
ResponderExcluirTambém aproveito para lhe parabenizar pela iniciativa que você está tomando... fazendo você ter uma grande evolução em SQL... :)
Compartilhe esse entusiasmo por tecnologia!
Valeu!