По подразбиране 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.