sql >> Database >  >> RDS >> Oracle

Accent- en hoofdletterongevoelige sortering in Oracle met LIKE

een methode zou zijn om uw sessieparameters te wijzigen NLS_SORT en 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

Zoals in een andere SO wordt getoond, kunt u de LIKE-operator niet gebruiken met NLSSORT (dit is omdat NLSSORT een reeks bytes retourneert die zal worden gebruikt voor het sorteren, en LIKE werkt alleen met tekenreeksen)

Bijwerken: Hoewel het instellen van de NLS-parameters mijn eerste keuze zou zijn, zou je ook ingebouwde functies kunnen gebruiken om hetzelfde resultaat te bereiken. Een paar voorbeelden:

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. Hoe een inconsistente MySQL-slave opnieuw te bouwen?

  2. MySQL-updatetabel op basis van een andere tabelwaarde

  3. Meerdere updates in MySQL

  4. Postgresql:Verbinding geweigerd. Controleer of de hostnaam en poort correct zijn en of de postmaster TCP/IP-verbindingen accepteert