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

Assemblage insensible aux accents et à la casse dans Oracle avec LIKE

une méthode serait de modifier vos paramètres de session NLS_SORT et 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

Comme indiqué dans un autre SO, vous ne pouvez pas utiliser l'opérateur LIKE avec NLSSORT (en effet, NLSSORT renvoie une chaîne d'octets qui sera utilisée pour le tri, et LIKE ne fonctionne qu'avec des chaînes de caractères)

Mise à jour : Bien que la définition des paramètres NLS soit mon premier choix, vous pouvez également utiliser des fonctions intégrées pour obtenir le même résultat. Quelques exemples :

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