Oracle
 sql >> Base de Dados >  >> RDS >> Oracle

Texto de pesquisa do Oracle com caracteres não ingleses


1) Usando nlssort com BINARY_AI (tanto maiúsculas quanto minúsculas):
SQL> select nlssort('Peña Báináõ', 'NLS_SORT = BINARY_AI') C from dual;

C
------------------------
70656E61206261696E616F00

SQL> select nlssort('Pena Bainao', 'NLS_SORT = BINARY_AI') C from dual;

C
------------------------
70656E61206261696E616F00

SQL> select nlssort('pena bainao', 'NLS_SORT = BINARY_AI') C from dual;

C
------------------------
70656E61206261696E616F00

SQL> select 'true' T from dual where nlssort('pena bainao', 'NLS_SORT = BINARY_AI') = nlssort('Peña Báináõ', 'NLS_SORT = BINARY_AI') ;

T
----
true

2) Você também pode alterar a variável de sessão NLS_SORT para binary_ai e não precisaria especificar NLS_SORT todas as vezes:
SQL> select 'true' T from dual where nlssort('pena bainao') = nlssort('Peña Báináõ') ;

no rows selected

SQL> alter session set nls_sort = binary_ai;

Session altered.

SQL> select 'true' T from dual where nlssort('pena bainao') = nlssort('Peña Báináõ') ;

T
----
true

3) Para descartar o uso de nlssort function e altere a semática de tudo, defina também a variável de sessão nls_comp:
SQL> select 'true' T from dual where 'pena bainao' = 'Peña Báináõ';

no rows selected

SQL> alter session set nls_comp = linguistic;

Session altered.

SQL> select 'true' T from dual where 'pena bainao' = 'Peña Báináõ';

T
----
true

A opção 1 altera apenas o comportamento local, a consulta onde você deseja resultados diferentes. As opções 2 e 3 mudarão o comportamento de outras consultas e podem não ser o que você deseja. Consulte a Tabela 5-2 do Guia de suporte de globalização do banco de dados Oracle® . Consulte também a seção "Usando índices linguísticos " para ver como poder usar índices.