SQLite
 sql >> Baza danych >  >> RDS >> SQLite

Jak sprawić, by operator LIKE SQLite uwzględniał wielkość liter?

Domyślnie SQLite LIKE operator nie rozróżnia wielkości liter dla znaków ASCII. Oznacza to, że będzie pasował do wielkich i małych liter, niezależnie od tego, jakiej wielkości użyjesz we wzorze.

Istnieje jednak technika, dzięki której rozróżniana jest wielkość liter.

SQLite ma instrukcję PRAGMA o nazwie case_ sensitive_like , który został zaprojektowany specjalnie po to, aby LIKE operator rozróżnia wielkość liter dla znaków ASCII.

Powodem, dla którego określam „znaki ASCII” jest to, że LIKE operator domyślnie rozróżnia wielkość liter dla znaków Unicode, które są poza zakresem ASCII.

Dlatego jeśli potrzebujesz LIKE operator rozróżniający wielkość liter w zakresie ASCII, case_ sensitive_like Oświadczenie PRAGMA może być tym, czego szukasz.

Dotyczy to również funkcji like() funkcja, która działa dokładnie tak samo jak funkcja LIKE operatora.

Włączanie/wyłączanie rozróżniania wielkości liter

Aby włączyć rozróżnianie wielkości liter, możesz użyć dowolnej z następujących wartości logicznych:

1
on
true
yes

Aby wyłączyć rozróżnianie wielkości liter, możesz użyć dowolnej z następujących wartości logicznych:

0
off
false
no

Argument może być umieszczony w nawiasach lub może być oddzielony od nazwy pragmy znakiem równości.

Argumenty słów kluczowych mogą opcjonalnie pojawiać się w cudzysłowie.

Przykład bez uwzględniania wielkości liter

Najpierw zobaczmy, co się dzieje, gdy nie używamy case_ sensitive_like Oświadczenie PRAGMA.

SELECT 
  'a' LIKE 'A',
  'æ' LIKE 'Æ';

Wynik:

'a' LIKE 'A'  'æ' LIKE 'Æ'
------------  ------------
1             0           

W takim przypadku w pierwszej kolumnie nie jest rozróżniana wielkość liter – wielkie litery A pasuje do małej litery a .

A oto zapytanie do tabeli bazy danych.

SELECT 
  CatName,
  CatName LIKE 'br%'
FROM Cats;

Wynik:

CatName     CatName LIKE 'br%'
----------  ------------------
Brush       1                 
Brash       1                 
Broosh      1                 
100%Fluff   0                 
100$Fluff   0                 

W tym przypadku otrzymujemy dopasowanie do wszystkich kotów, których imiona zaczynają się od Br , mimo że nasze kryteria używały małej litery b .

Przykład uwzględniający wielkość liter

Zobaczmy teraz, co się stanie, gdy użyjemy case_ sensitive_like Oświadczenie PRAGMA umożliwiające rozróżnianie wielkości liter w zakresie ASCII.

PRAGMA case_sensitive_like = 1;
SELECT 
  'a' LIKE 'A',
  'æ' LIKE 'Æ';

Wynik:

'a' LIKE 'A'  'æ' LIKE 'Æ'
------------  ------------
0             0           

Więc tym razem wielkie A czy nie dopasuj małe litery a .

A oto przykład bazy danych po włączeniu rozróżniania wielkości liter.

SELECT 
  CatName,
  CatName LIKE 'br%'
FROM Cats;

Wynik:

CatName     CatName LIKE 'br%'
----------  ------------------
Brush       0                 
Brash       0                 
Broosh      0                 
100%Fluff   0                 
100$Fluff   0                 

Zauważ, że nie musiałem ponownie uruchamiać instrukcji PRAGMA. Ustawienie pozostaje dla mojego połączenia, dopóki go nie zmienię.

Wyłącz rozróżnianie wielkości liter

Oto przykład wyłączenia rozróżniania wielkości liter i ponownego uruchomienia zapytania.

PRAGMA case_sensitive_like = 0;
SELECT 
  CatName,
  CatName LIKE 'br%'
FROM Cats;

Wynik:

CatName     CatName LIKE 'br%'
----------  ------------------
Brush       1                 
Brash       1                 
Broosh      1                 
100%Fluff   0                 
100$Fluff   0                 

Funkcja Like()

Jak wspomniano, case_ sensitive_like Instrukcja PRAGMA wpływa również na like() funkcja.

PRAGMA case_sensitive_like = 1;
SELECT 
  CatName,
  like('Br%', CatName),
  like('br%', CatName)
FROM Cats;

Wynik:

CatName     like('Br%', CatName)  like('br%', CatName)
----------  --------------------  --------------------
Brush       1                     0                   
Brash       1                     0                   
Broosh      1                     0                   
100%Fluff   0                     0                   
100$Fluff   0                     0                   

Operator LIKE obsługujący Unicode

Możesz również użyć rozszerzenia SQLite ICU, jeśli potrzebujesz obsługi Unicode LIKE operator.

Implementacja LIKE zawarte w tym rozszerzeniu używa funkcji ICU u_foldCase() aby zapewnić porównania niezależne od wielkości liter dla pełnego zakresu znaków Unicode.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. java.lang.IllegalStateException:Nie można odczytać wiersza 0, col -1 z CursorWindow — problem z sqlite dla Androida

  2. SQLite - Eksportuj dane do pliku CSV

  3. SQLite JSON_EACH()

  4. Jak przekonwertować milisekundy do daty w SQLite

  5. Jak automatycznie ponownie wysłać zapytanie za pomocą LoaderManager