SQLite
 sql >> база данни >  >> RDS >> SQLite

Как да направите оператора LIKE на SQLite чувствителен към малките букви

По подразбиране SQLite LIKE Операторът е без значение за ASCII символи. Това означава, че ще съвпада с главни и малки букви, независимо кой регистър използвате във вашия шаблон.

Въпреки това, има техника, която можете да използвате, за да го направите чувствителен към главни букви.

SQLite има израз PRAGMA, наречен case_sensitive_like , който е предназначен специално да направи LIKE Операторът е чувствителен към малките букви за ASCII символи.

Причината да посоча „ASCII символи“ е, защото LIKE Операторът е чувствителен към главните букви по подразбиране за уникод символи, които са извън обхвата на ASCII.

Следователно, ако имате нужда от LIKE операторът да бъде чувствителен към малки и големи букви в диапазона на ASCII, case_sensitive_like Изявлението PRAGMA може да е това, което търсите.

Това важи и за like() функция, която работи точно по същия начин като LIKE оператор.

Активиране/деактивиране на чувствителността на малки и малки букви

Можете да използвате някоя от следните булеви стойности, за да активирате чувствителността на малки и малки букви:

1
on
true
yes

Можете да използвате някоя от следните булеви стойности, за да деактивирате чувствителността на главни и малки букви:

0
off
false
no

Аргументът може да бъде или в скоби, или може да бъде отделен от името на прагма със знак за равенство.

Аргументите на ключовите думи могат по избор да се показват в кавички.

Пример за независими от главни букви

Първо нека видим какво се случва, когато не използваме case_sensitive_like Изявление на PRAGMA.

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

Резултат:

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

В този случай първата колона не е чувствителна към главни букви – главният A съвпада с малки букви a .

И ето заявка към таблица на база данни.

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

Резултат:

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

В този случай получаваме съвпадение срещу всички котки, чиито имена започват с Br , въпреки че нашите критерии са използвали малка буква b .

Пример, чувствителен към малки и малки букви

Сега нека видим какво се случва, когато използваме case_sensitive_like Изявление PRAGMA за активиране на чувствителност към малки и големи букви в диапазона на ASCII.

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

Резултат:

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

Така че този път главни букви A не съвпадат с малки букви a .

И ето примера с базата данни след активиране на чувствителността към малки и малки букви.

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

Резултат:

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

Забележете, че не е трябвало да изпълнявам изявлението PRAGMA отново. Настройката остава в сила за моята връзка, докато не я променя.

Деактивиране на чувствителността на малки и малки букви

Ето пример за деактивиране на чувствителността към малки и малки букви и стартиране на заявката отново.

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

Резултат:

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

Функция Like()

Както споменахме, case_sensitive_like Инструкцията PRAGMA също засяга like() функция.

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

Резултат:

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

Unicode-Aware LIKE оператор

Можете също да използвате разширението на SQLite ICU, ако имате нужда от LIKE, наясно с unicode оператор.

Реализацията на LIKE включено в това разширение използва функцията ICU u_foldCase() за осигуряване на сравнения, независими от главните букви за пълния набор от символи в 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. 3 начина за извличане на стойност от JSON документ в SQLite

  2. UnsatisfiedLinkError в собствения метод

  3. Управление на данни с Python, SQLite и SQLAlchemy

  4. Експортирайте цяла база данни на SQLite в SQL файл

  5. Предупреждение по време на компилиране в Android Room за колона във външен ключ, която не е част от индекс. Какво означава?