sql >> Base de Datos >  >> RDS >> Oracle

Intercalación insensible a mayúsculas y minúsculas en Oracle con LIKE

un método sería modificar los parámetros de su sesión NLS_SORT y 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

Como se muestra en otro SO, no puede usar el operador LIKE con NLSSORT (Esto se debe a que NLSSORT devuelve una cadena de bytes que se usará para ordenar y LIKE solo funciona con cadenas de caracteres)

Actualización: Si bien configurar los parámetros NLS sería mi primera opción, también podría usar funciones integradas para lograr el mismo resultado. Un par de ejemplos:

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