Oracle
 sql >> Base de Dados >  >> RDS >> Oracle

Agrupamento sem distinção entre acento e maiúsculas e minúsculas no Oracle com LIKE


um método seria modificar seus parâmetros de sessão 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

Conforme mostrado em outro SO, você não pode usar o operador LIKE com NLSSORT (isso ocorre porque, NLSSORT retorna uma string de bytes que será usada para classificação, e LIKE só funciona com strings de caracteres)

Atualização: Embora definir os parâmetros NLS seja minha primeira escolha, você também pode usar funções internas para obter o mesmo resultado. Alguns exemplos:
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