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.