SQLite like()
funktionen giver dig mulighed for at sammenligne en streng med et givet mønster. Du kan også angive et escape-tegn, hvis det kræves.
Du kan bruge like()
fungere som et alternativ til LIKE
operator (som giver dig mulighed for at køre Y LIKE X [ESCAPE Z]
udtryk).
Syntaks
Du kan bruge en af følgende:
like(X,Y)
like(X,Y,Z)
X
er mønsteretY
er strengenZ
er et valgfrit escape-tegn
Grundlæggende eksempel
Tag følgende tabel:
CatId CatName ---------- ---------- 1 Brush 2 Flutter 3 100%Fluff 4 100$Fluff
Vi kan køre følgende kode for at returnere alle rækker, hvor kattens navn starter med bogstavet F:
SELECT * FROM Cats
WHERE like('F%', CatName);
Resultat:
CatId CatName ---------- ---------- 3 Flutter
I dette eksempel brugte jeg %
jokertegn for at angive et hvilket som helst antal tegn, der kan følge (inklusive nul tegn), og at de kan være et hvilket som helst tegn.
Understregningstegn (_)
Her er et eksempel, der bruger understregningen (_
) Karakter. Dette jokertegn matcher nøjagtigt ét tegn – hverken mere eller mindre.
SELECT * FROM Cats
WHERE like('Br_sh', CatName);
Resultat:
CatId CatName ---------- ---------- 1 Brush
Som nævnt matcher den kun et enkelt tegn. Så baseret på mine data kan jeg ikke gøre følgende og forvente nogen match.
SELECT * FROM Cats
WHERE like('Br_', CatName);
Resultat:
(Dette er bevidst tomt på grund af ingen resultater).
Undslippende tegn
Du kan også undslippe tegn, hvis det kræves. For at gøre dette skal du tilføje escape-tegnet som en tredje parameter (og også tilføje det før det tegn, du vil escape).
SELECT * FROM Cats
WHERE like('100\%F%', CatName, '\');
Resultat:
CatId CatName ---------- ---------- 3 100%Fluff
I dette tilfælde undslap jeg procenttegnet (%
). Jeg gjorde dette, fordi jeg ledte efter katte, der havde et faktisk procenttegn i deres navne. Faktisk søgte jeg i dette tilfælde efter et meget specifikt kattenavn – et der begynder med 100%F .
Hvis jeg ikke var sluppet for det, ville det være blevet brugt som et jokertegn, og resultaterne ville have været anderledes.
Her er, hvad jeg får, når jeg fjerner escape-karakteren.
SELECT * FROM Cats
WHERE like('100%F%', CatName);
Resultat:
CatId CatName ---------- ---------- 3 100%Fluff 4 100$Fluff
Returner en boolesk værdi
Du kan bruge like()
funktion for at returnere et 0 eller 1 , alt efter om der er et match eller ej.
Dette kan være praktisk, hvis du skal returnere alle rækker, men også med et flag, der viser, om de matcher dine kriterier eller ej.
Her er et eksempel.
SELECT
CatName,
like('F%', CatName)
FROM Cats;
Resultat:
CatName CatName LIKE 'F%' ---------- ------------------ Brush 0 Flutter 1 100%Fluff 0 100$Fluff 0
I dette tilfælde matchede kun én række kriterierne, men vi fik stadig set alle de andre rækker.
Skabsfølsomhed
Som standard er SQLite like()
funktionen er ufølsom for store og små bogstaver for ASCII-tegn. Det betyder, at det vil matche store og små bogstaver, uanset hvilket bogstav du bruger i dit mønster.
Du kan bruge case_sensitive_like PRAGMA-erklæring til at udføre store og små bogstaver match i ASCII-området.
Se, hvordan du gør SQLites LIKE-operatør følsomme for store og små bogstaver for eksempler. Denne artikel er skrevet til LIKE
operatoren, men den gælder også for like()
funktion.