Ignorando Acentos e Maiúsculas/Minúsculas no 10g
08/01/2009
O Oracle 10g agora permite fazer consultas considerando ou não acentos e maiúsculas/minúsculas. Isso é feito pelo uso do parâmetro NLS_SORT. Vamos aos exemplos.
Temos que adicionar o prefixo _ai para “accent insensitive” (ignora os acentos). Ou _ci para “case insensitive” (ignora se é maiúsculo ou minúsculo).
O nls_sort afeta uma série de funções SQL e operações, incluindo essas:
* WHERE
* ORDER BY
* START WITH
* HAVING
* IN / NOT IN
* BETWEEN
* CASE-WHEN
Algumas funções entretanto, não são afetadas pelo nls_sort. (Como LIKE, TRIM, INSTR).
Observe o comportamento normal do ORDER BY:
SQL> select * from thomas_teste order by 1; NOME ------------------------------------------- THOMAS 2 Thomas 3 thomas 1 SQL>
Agora, a mesma consulta, mas antes mudamos o NLS_SORT para ignorar os maiúsculos e minúsculos:
SQL> ALTER SESSION SET NLS_SORT=generic_m_ci; Session altered. SQL> select * from thomas_teste order by 1; NOME ----------------------------------------------- thomas 1 THOMAS 2 Thomas 3 SQL>
Agora, o mesmo resultado acima SEM mudar a sessão:
SQL> select * from thomas_teste 2 order by nlssort( nome, 'NLS_SORT=generic_m_ci'); NOME ------------------------------------------------------- thomas 1 THOMAS 2 Thomas 3 SQL>
E é claro, também pode usar o _ai para ignorar os acentos.
NOTA: o _ai inclui a funcionalidade do CASE INSENSITIVE também!
Tags: Acentuação, Oracle 10g, SQL
