Oracle – Consultas com “Accent Insensitive”

Postado por Rafael Monteiro em 4/12/2008

Estava precisando fazer uma consulta que não levasse em conta acentos digitados pelo usuário no filtro da pesquisa, nem a capitalização (case).

Eis que após alguma pesquisa cheguei à seguinte solução:

WHERE
TRANSLATE(UPPER(campo),'ÁÇÉÍÓÚÀÈÌÒÙÂÊÎÔÛÃÕËÜ','ACEIOUAEIOUAEIOUAOEU')
LIKE
TRANSLATE(UPPER('%parametro%'),'ÁÇÉÍÓÚÀÈÌÒÙÂÊÎÔÛÃÕËÜ',
'ACEIOUAEIOUAEIOUAOEU')

 

Dependendo da complexidade da consulta, pode ser mais interessante a utilização do conceito de Full Text Search, mas para uma consulta mais 'simples', o exposto acima supre a necessidade.

3 Comentário para “Oracle – Consultas com “Accent Insensitive””

  1. Rafael SDM Sierra disse em 4/12/2008 as 14:06

    Dependendo da linguagen é melhor fazer o translate do campo nela, assim é um translate a menos pro banco de dados :P

  2. Ulisses Castro disse em 4/12/2008 as 01:21

    Ae Rafaéis! :)

    Ow… só pra lembrar sei q nao precisa pq vcs sao todos ninjas mas, cuidado com o contexto do trecho de código acima! ;)
    Ex:

    (...)
    WHERE
    TRANSLATE(UPPER(campo),\'ÁÇÉÍÓÚÀÈÌÒÙÂÊÎÔÛÃÕËÜ\',\'ACEIOUAEIOUAEIOUAOEU\')
    LIKE
    TRANSLATE(UPPER(\'\')) AND 1=0 UNION SELECT NUMERO DE COLUNAS PARA IGUALAR AQUI FROM TABELADOSISTEMA /* \'),\'ÁÇÉÍÓÚÀÈÌÒÙÂÊÎÔÛÃÕËÜ\',
    \'ACEIOUAEIOUAEIOUAOEU\')

    ficou meio torto mas deu pra entender né? :)

    Grande abraço! :)

  3. Ulisses Castro disse em 4/12/2008 as 01:22

    ignorem as \, magic_quotes sucks. :)

Trackback URI | RSS dos comentários

Deixe um comentário

Av. Conselheiro Nébias, 368A, Cj. 413
Vila Mathias - Santos - SP
Telefone: (13) 3345-4580

© 2008 - 2009 Stiod. Todos os direitos reservados.