Oracle
 sql >> Database >  >> RDS >> Oracle

Testo di ricerca Oracle con caratteri non inglesi

1) Usando nlssort con BINARY_AI (sia maiuscolo/minuscolo che accento minuscolo):

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) Potresti anche modificare la variabile di sessione NLS_SORT in binary_ai e quindi non dovresti specificare NLS_SORT ogni volta:

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) Per eliminare l'uso di nlssort funzione e cambia la semantica di tutto, imposta anche la variabile di sessione 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'opzione 1 cambia solo il comportamento locale, la query in cui desideri risultati diversi. Le opzioni 2 e 3 cambieranno il comportamento di altre query e potrebbero non essere quelle desiderate. Vedi Tabella 5-2 di Guida di supporto alla globalizzazione del database Oracle® . Guarda anche la sezione "Utilizzo degli indici linguistici " per vedere come utilizzare gli indici.