Categorias

Busca inteligente em ASP

Quando fazemos uma busca simples em um site, usamos o método padrão:

"SELECT * FROM tabela WHERE campo Like'%" & var_busca & "%'"

Esta busca captura os valores independente se maiúsculos ou minúsculos.
Mas, quanto há presença de acentos, esta busca ignora a existência dos mesmos, não capturando os dados quando não informado o acento.

Utilizando a função abaixo serão capturadas todas as referências encontradas, independente se o usuário digitou ou não acentos na busca:

<%
Function busca_inteligente(str)
  Dim v
  v = lcase(str)
  v = Replace(v,"%","")
  v = Replace(v,"'","")
  v = Replace(v,"""","")
  v = replace(v, "ó" , "o")
  v = replace(v, "ò" , "o")
  v = replace(v, "ô" , "o")
  v = replace(v, "õ" , "o")
  v = replace(v, "ö" , "o")
  v = replace(v, "á" , "a")
  v = replace(v, "à" , "a")
  v = replace(v, "â" , "a")
  v = replace(v, "ã" , "a")
  v = replace(v, "ä" , "a")
  v = replace(v, "é" , "e")
  v = replace(v, "è" , "e")
  v = replace(v, "ê" , "e")
  v = replace(v, "ú" , "u")
  v = replace(v, "ù" , "u")
  v = replace(v, "û" , "u")
  v = replace(v, "ü" , "u")
  v = replace(v, "í" , "i")
  v = replace(v, "ì" , "i")
  v = replace(v, "ç" , "c")
  v = replace(v,"a","[a,á,à,ã,â,ä]")
  v = replace(v,"e","[e,é,è,ê]")
  v = replace(v,"i","[i,í,ì]")
  v = replace(v,"o","[o,ó,ò,õ,ô,ö]")
  v = replace(v,"u","[u,ú,ù,û,ü]")
  v = replace(v,"c","[c,ç]")
  v = replace(v,"'","['']")
  Prepara_busca = v
End Function
%>

Desta forma, a instrução ficaria:

"SELECT * FROM tabela WHERE campo Like'%" & busca_inteligente(var_busca) & "%'"