Oracle
 sql >> Datenbank >  >> RDS >> Oracle

Akzent- und Groß-/Kleinschreibungsunabhängige Sortierung in Oracle mit LIKE

Eine Methode wäre, Ihre Sitzungsparameter NLS_SORT zu ändern und 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

Wie in einem anderen SO gezeigt, können Sie den LIKE-Operator nicht mit NLSSORT verwenden (Das liegt daran, dass NLSSORT eine Reihe von Bytes zurückgibt, die zum Sortieren verwendet werden, und LIKE nur mit Zeichenketten funktioniert)

Aktualisierung: Während das Einstellen der NLS-Parameter meine erste Wahl wäre, könnten Sie auch integrierte Funktionen verwenden, um das gleiche Ergebnis zu erzielen. Ein paar Beispiele:

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