Oracle
 sql >> Baza danych >  >> RDS >> Oracle

Sortowanie bez rozróżniania akcentów i wielkości liter w Oracle z LIKE

jedną z metod byłoby zmodyfikowanie parametrów sesji NLS_SORT i 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 pokazano w innym SO, nie można używać operatora LIKE z NLSSORT (to dlatego, że NLSSORT zwraca ciąg bajtów, które będą używane do sortowania, a LIKE działa tylko z ciągami znaków)

Aktualizacja: Podczas gdy ustawienie parametrów NLS byłoby moim pierwszym wyborem, możesz również użyć wbudowanych funkcji, aby osiągnąć ten sam wynik. Kilka przykładów:

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. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Po co używać klauzuli JOIN zamiast warunku WHERE?

  2. Łączenie się z bazą danych Oracle za pomocą SQLAlchemy

  3. zmień kolumnę upuszczania tabeli w bazie danych Oracle

  4. Jak używać aliasu w klauzuli Gdzie?

  5. Java JDBC - Jak połączyć się z Oracle za pomocą tnsnames.ora