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

Fascicolazione senza distinzione tra maiuscole e minuscole in Oracle con LIKE

un metodo potrebbe essere quello di modificare i parametri della sessione NLS_SORT e NLS_COMP :

SQL> SELECT Name FROM CollationTestTable WHERE NAME LIKE '%pe%';

NAME
--------------------------------------------------------------------------------
pepe

SQL> alter session set nls_sort=Latin_AI;

Session altered

SQL> alter session set nls_comp=linguistic;

Session altered

SQL> SELECT Name FROM CollationTestTable WHERE NAME LIKE '%pe%';

NAME
--------------------------------------------------------------------------------
pepe
pépé
PEPE

Come mostrato in un altro SO, non puoi usare l'operatore LIKE con NLSSORT (questo perché NLSSORT restituisce una stringa di byte che verrà utilizzata per l'ordinamento e LIKE funziona solo con stringhe di caratteri)

Aggiornamento: Sebbene l'impostazione dei parametri NLS sarebbe la mia prima scelta, potresti anche utilizzare le funzioni integrate per ottenere lo stesso risultato. Un paio di esempi:

SQL> SELECT Name
  2    FROM CollationTestTable
  3   WHERE upper(convert(NAME, 'US7ASCII'))
  4         LIKE upper(convert('%pe%', 'US7ASCII'));

NAME
--------------------------------------------------------------------------------
pepe
pépé
PEPE

SQL> SELECT Name
  2    FROM CollationTestTable
  3   WHERE upper(translate(NAME, 'àâéèêìîòôùûÿ', 'aaeeeiioouuy'))
  4         LIKE upper(translate('%pe%', 'àâéèêìîòôùûÿ', 'aaeeeiioouuy'));

NAME
-----------------------------------
pepe
pépé
PEPE