sql >> Databáze >  >> RDS >> Oracle

Porovnávání bez rozlišování akcentů a velkých a malých písmen v Oracle s LIKE

jednou z metod by bylo upravit parametry relace NLS_SORT a 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

Jak je uvedeno v jiném SO, nemůžete použít operátor LIKE s NLSSORT (je to proto, že NLSSORT vrací řetězec bajtů, který bude použit pro řazení, a LIKE funguje pouze s řetězci znaků)

Aktualizace: Zatímco nastavení parametrů NLS by bylo mou první volbou, můžete také použít vestavěné funkce k dosažení stejného výsledku. Pár příkladů:

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



  1. 2 způsoby, jak získat krátký název měsíce z data v MariaDB

  2. Příklady LOG() v SQL Server

  3. Jak vypsat aktivní / otevřená připojení v Oracle?

  4. Jak povolit omezení CHECK v SQL Server (příklad T-SQL)