Standaard is de SQLite LIKE
operator is niet hoofdlettergevoelig voor ASCII-tekens. Dit betekent dat het overeenkomt met hoofdletters en kleine letters, ongeacht welke hoofdletters je in je patroon gebruikt.
Er is echter een techniek die u kunt gebruiken om het hoofdlettergevoelig te maken.
SQLite heeft een PRAGMA-instructie met de naam case_sensitive_like , die speciaal is ontworpen om de LIKE
operator hoofdlettergevoelig voor ASCII-tekens.
De reden dat ik "ASCII-tekens" specificeer, is omdat de LIKE
operator is standaard hoofdlettergevoelig voor Unicode-tekens die buiten het ASCII-bereik vallen.
Daarom, als je de LIKE
. nodig hebt operator om hoofdlettergevoelig te zijn in het ASCII-bereik, de case_sensitive_like PRAGMA-verklaring zou kunnen zijn wat u zoekt.
Dit geldt ook voor de like()
functie, die precies hetzelfde werkt als de LIKE
telefoniste.
Hoofdlettergevoeligheid in-/uitschakelen
U kunt elk van de volgende booleaanse waarden gebruiken om hoofdlettergevoeligheid in te schakelen:
1
on
true
yes
U kunt elk van de volgende booleaanse waarden gebruiken om hoofdlettergevoeligheid uit te schakelen:
0
off
false
no
Het argument kan tussen haakjes staan of het kan worden gescheiden van de pragmanaam door een gelijkteken.
Zoekwoordargumenten kunnen optioneel tussen aanhalingstekens worden weergegeven.
Hoofdlettergevoelig voorbeeld
Laten we eerst eens kijken wat er gebeurt als we de case_sensitive_like . niet gebruiken PRAGMA-verklaring.
SELECT
'a' LIKE 'A',
'æ' LIKE 'Æ';
Resultaat:
'a' LIKE 'A' 'æ' LIKE 'Æ' ------------ ------------ 1 0
In dit geval is de eerste kolom niet hoofdlettergevoelig – de hoofdletter A komt overeen met de kleine letter a .
En hier is een query op een databasetabel.
SELECT
CatName,
CatName LIKE 'br%'
FROM Cats;
Resultaat:
CatName CatName LIKE 'br%' ---------- ------------------ Brush 1 Brash 1 Broosh 1 100%Fluff 0 100$Fluff 0
In dit geval krijgen we een match tegen alle katten wiens namen beginnen met Br , ook al gebruikten onze criteria een kleine letter b .
Hoofdlettergevoelig voorbeeld
Laten we nu eens kijken wat er gebeurt als we de case_sensitive_like . gebruiken PRAGMA-statement om hoofdlettergevoeligheid in het ASCII-bereik mogelijk te maken.
PRAGMA case_sensitive_like = 1;
SELECT
'a' LIKE 'A',
'æ' LIKE 'Æ';
Resultaat:
'a' LIKE 'A' 'æ' LIKE 'Æ' ------------ ------------ 0 0
Dus deze keer de hoofdletter A doet niet match de kleine letters a .
En hier is het databasevoorbeeld nadat hoofdlettergevoeligheid is ingeschakeld.
SELECT
CatName,
CatName LIKE 'br%'
FROM Cats;
Resultaat:
CatName CatName LIKE 'br%' ---------- ------------------ Brush 0 Brash 0 Broosh 0 100%Fluff 0 100$Fluff 0
Merk op dat ik de PRAGMA-verklaring niet opnieuw hoefde uit te voeren. De instelling blijft van kracht voor mijn verbinding totdat ik deze wijzig.
Hoofdlettergevoeligheid uitschakelen
Hier is een voorbeeld van het uitschakelen van hoofdlettergevoeligheid en het opnieuw uitvoeren van de query.
PRAGMA case_sensitive_like = 0;
SELECT
CatName,
CatName LIKE 'br%'
FROM Cats;
Resultaat:
CatName CatName LIKE 'br%' ---------- ------------------ Brush 1 Brash 1 Broosh 1 100%Fluff 0 100$Fluff 0
De Like()-functie
Zoals gezegd, de case_sensitive_like PRAGMA-instructie heeft ook invloed op de like()
functie.
PRAGMA case_sensitive_like = 1;
SELECT
CatName,
like('Br%', CatName),
like('br%', CatName)
FROM Cats;
Resultaat:
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-bewuste LIKE-operator
U kunt ook de SQLite ICU-extensie gebruiken als u een unicode-bewuste LIKE
. nodig heeft exploitant.
De implementatie van LIKE
opgenomen in deze extensie gebruikt de ICU-functie u_foldCase()
om hoofdletteronafhankelijke vergelijkingen te bieden voor het volledige bereik van Unicode-tekens.