Ve výchozím nastavení SQLite LIKE
operátor nerozlišuje velká a malá písmena u znaků ASCII. To znamená, že bude odpovídat velkým a malým písmenům, bez ohledu na to, jaká velká a malá písmena ve svém vzoru použijete.
Existuje však technika, kterou můžete použít k tomu, aby se rozlišovala malá a velká písmena.
SQLite má příkaz PRAGMA s názvem case_sensitive_like , který je navržen tak, aby konkrétně dával LIKE
operátor rozlišuje velká a malá písmena u znaků ASCII.
Důvod, proč specifikuji „ASCII znaky“, je proto, že LIKE
Operátor ve výchozím nastavení rozlišuje velká a malá písmena pro znaky Unicode, které jsou mimo rozsah ASCII.
Pokud tedy potřebujete LIKE
operátor rozlišuje malá a velká písmena v rozsahu ASCII, case_sensitive_like Prohlášení PRAGMA může být to, co hledáte.
To platí také pro like()
funkce, která funguje úplně stejně jako LIKE
operátor.
Povolení/zakázání rozlišování malých a velkých písmen
K povolení rozlišování velkých a malých písmen můžete použít kteroukoli z následujících booleovských hodnot:
1
on
true
yes
Pro zakázání rozlišování velkých a malých písmen můžete použít kteroukoli z následujících booleovských hodnot:
0
off
false
no
Argument může být buď v závorce, nebo může být od názvu pragma oddělen rovnítkem.
Argumenty klíčových slov mohou být volitelně uvedeny v uvozovkách.
Příklad bez rozlišení malých a velkých písmen
Nejprve se podívejme, co se stane, když nepoužijeme case_sensitive_like prohlášení PRAGMA.
SELECT
'a' LIKE 'A',
'æ' LIKE 'Æ';
Výsledek:
'a' LIKE 'A' 'æ' LIKE 'Æ' ------------ ------------ 1 0
V tomto případě první sloupec nerozlišuje malá a velká písmena – velká písmena A odpovídá malým písmenům a .
A zde je dotaz na databázovou tabulku.
SELECT
CatName,
CatName LIKE 'br%'
FROM Cats;
Výsledek:
CatName CatName LIKE 'br%' ---------- ------------------ Brush 1 Brash 1 Broosh 1 100%Fluff 0 100$Fluff 0
V tomto případě získáme shodu se všemi kočkami, jejichž jména začínají Br , i když naše kritéria používala malá písmena b .
Příklad rozlišování malých a velkých písmen
Nyní se podívejme, co se stane, když použijeme case_sensitive_like PRAGMA pro povolení rozlišování velkých a malých písmen v rozsahu ASCII.
PRAGMA case_sensitive_like = 1;
SELECT
'a' LIKE 'A',
'æ' LIKE 'Æ';
Výsledek:
'a' LIKE 'A' 'æ' LIKE 'Æ' ------------ ------------ 0 0
Tentokrát tedy velké A není odpovídat malým písmenům a .
A zde je příklad databáze po povolení rozlišování velkých a malých písmen.
SELECT
CatName,
CatName LIKE 'br%'
FROM Cats;
Výsledek:
CatName CatName LIKE 'br%' ---------- ------------------ Brush 0 Brash 0 Broosh 0 100%Fluff 0 100$Fluff 0
Všimněte si, že jsem nemusel znovu spouštět příkaz PRAGMA. Nastavení zůstává na místě pro mé připojení, dokud jej nezměním.
Zakázat rozlišování malých a velkých písmen
Zde je příklad deaktivace rozlišování malých a velkých písmen a opětovného spuštění dotazu.
PRAGMA case_sensitive_like = 0;
SELECT
CatName,
CatName LIKE 'br%'
FROM Cats;
Výsledek:
CatName CatName LIKE 'br%' ---------- ------------------ Brush 1 Brash 1 Broosh 1 100%Fluff 0 100$Fluff 0
Funkce Like()
Jak již bylo zmíněno, case_sensitive_like Příkaz PRAGMA také ovlivňuje like()
funkce.
PRAGMA case_sensitive_like = 1;
SELECT
CatName,
like('Br%', CatName),
like('br%', CatName)
FROM Cats;
Výsledek:
CatName like('Br%', CatName) like('br%', CatName) ---------- -------------------- -------------------- Brush 1 0 Brash 1 0 Broosh 1 0 100%Fluff 0 0 100$Fluff 0 0
Operátor LIKE s podporou Unicode
Můžete také použít rozšíření SQLite ICU, pokud potřebujete LIKE
s podporou unicode operátor.
Implementace LIKE
zahrnuté v tomto rozšíření používá funkci ICU u_foldCase()
poskytnout srovnání bez ohledu na malá a velká písmena pro celý rozsah znaků unicode.