Função para contar Palavras (Padrão de caracteres) em uma String Microsoft SQL Server
November 6th, 2009 | Published in Banco de Dados, Programação SQL, Programação em geral | 1 Comment
Salve galera!
Precisei durante essa semana de uma função que contasse quantas vezes uma palavra aparecia dentro de uma String no SQL Server. Achei que já tivesse algo pelo menos similar, mais após andar pelo MSDN e pelo Books Online vi que o jeito seria fazer uma função.
A lógica é a seguinte:
- Recebo via Parâmetro a Palavra que quero buscar e a String toda ou texto.
- Faço um loop baseado no tamanho do texto.
- Pego o tamanho da palavra que está sendo procurada e a cada caracter do texto, andamos o tamanho da palavra e comparamos se isso é igual a palavra procurada.
- Se for, soma um no contador de palavras e continua.
Agora como fica o código disso? Repare abaixo:
CREATE FUNCTION CountSearchPat
(
@Word Varchar(100),
@String Varchar(Max)
)
RETURNS int
AS
BEGIN
-- Declaração Variáveis
Declare @Count int, @CountWord int
-- Contador de quantas vezes apareceu a palavra
Set @CountWord = 0
-- Contador do Loop
Set @Count = 0
-- Loop
While @Count <= Len(@String)
Begin
-- Se encontrar a palavra soma mais um para @CountWord
Set @CountWord =
Case When Substring(@String, @Count, Len(@Word)) = @Word
Then @CountWord + 1
Else @CountWord
End
-- Soma mais um ao contador
Set @Count = @Count + 1
End
-- Retorna Valor
Return @CountWord
END
Repare no loop da linha 30 que tem seu contador baseado no tamanho da String inteira, para percorrer cada caracter.
Na linha 24 temos uma variável que seu valor depende do CASE onde, se a partir daquele caracter for encontrada a palavra, soma mais um, senão continua com o mesmo valor.
Na linha 31 temos a soma do contador do loop. E então o retorno do valor da função.
Agora é só testar.
Por Exemplo: Select dbo.SearchStringPat(‘teste’, ‘aatestehstestehjkteste’)
O resultado será 3.
Agora reflita comigo no próximo Exemplo sugerido pelo meu Brother Hernando Santana:
Você tem uma String da seguinte maneira ‘AAAAA’ e procura pelo padrão ‘AA’. Qual valor irá retornar ?
A função criada aqui irá retornar 4. A resposta é uma questão de conceito. Eu ando caracter por caracter atrás da palavra. Podemos fazer andar a partir da palavra encontrada adicionando mais algumas variáveis sem problema e fazendo retornar o valor 2. Para minha necessidade não fazia diferença a princípio.
Idéia simples que resolveu os problemas do dia.
Até a Próxima! Abraços!
November 9th, 2009 at 07:40 (#)
bem útil, mas eu n faria isso nem q banco de dados deixasse de ser coisa do tinhoso