Oracle – Consultas com “Accent Insensitive”
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””
Deixe um comentário |


Dependendo da linguagen é melhor fazer o translate do campo nela, assim é um translate a menos pro banco de dados
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!
ignorem as \, magic_quotes sucks.