Oracle
 sql >> Base de données >  >> RDS >> Oracle

Texte de recherche Oracle avec des caractères non anglais

1) Utilisation de nlssort avec BINARY_AI (insensibilité à la fois à la casse et à l'accent) :

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) Vous pouvez également modifier la variable de session NLS_SORT en binary_ai et vous n'aurez alors pas à spécifier NLS_SORT à chaque fois :

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) Abandonner l'utilisation de nlssort fonction et changez la sématique de tout, définissez également la variable de session 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

L'option 1 modifie uniquement le comportement local, la requête pour laquelle vous souhaitez des résultats différents. Les options 2 et 3 modifieront le comportement d'autres requêtes et peuvent ne pas correspondre à ce que vous souhaitez. Voir Tableau 5-2 du Guide d'assistance à la globalisation de la base de données Oracle® . Consultez également la section "Utilisation des index linguistiques " pour voir comment pouvoir utiliser les index.