Flávio Silveira Programação & Desenvolvimento

  • BLOG
  • SOBRE
  • PORTFOLIO
  • CONTATO

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!

Compartilhe
  • Print
  • del.icio.us
  • Facebook
  • Google Bookmarks
  • LinkedIn
  • Live
  • MySpace
  • PDF
  • RSS
  • Twitter
  • email

Posts Relacionados

  • Formatando CPF no SQL com Expressões Regulares – RegexReplace
  • Tratando CPF, CNPJ, Primeiro nome e Data pelo SQL (Postgre)
  • Limitando o SELECT do SQL em diferentes Bancos de Dados

Comentários

Feed
  1. Renie disse:

    November 9th, 2009 at 07:40 (#)

    bem útil, mas eu n faria isso nem q banco de dados deixasse de ser coisa do tinhoso ;)

Deixe um comentário

Flávio Silveira

Programação & Desenvolvimentominha foto

Rss Logo Twitter Logo

Blogroll

  • Aurélio Marinho Jargas
  • Fábio Tomio
  • Mozart Petter
  • Renie Siqueira
  • Willian Rodriguez

Tags & Categorias

add-ons Apache apple arrays Banco de Dados CodeIgniter complementos Configuração PHP debug erro 500 erros de servidor Expressões Regulares facilidade formatação via sql Forms framework php geração de cadastros Geração de formulários Internet Explorer não salva session iphone ipod touch Layouts mozart petter mozilla firefox multiple site múltiplos sites com codeIgniter Php postgres Programação em geral reestruturando CodeIgniter Regex Replace Shell smarty SQL Sql Server Template engine Tempo de sessão codeIgniter Apache (1)
Banco de Dados (4)
Browsers (2)
CodeIgniter (7)
Expressões Regulares (1)
IPhone – Desenvolvimento (2)
JavaScript (1)
Php (9)
Programação em geral (10)
Programação SQL (4)
Screencast (1)
Servidor (1)
Shell Script (1)

WP Cumulus Flash tag cloud by Roy Tanck and Luke Morton requires Flash Player 9 or better.



©2010 Flávio Silveira
Powered by WordPress adapted of Gridline Lite of author Graph Paper Press.