I SQLite kan du bruge LIKE
operatør i dine forespørgsler for at lave en mønstermatchende sammenligning.
Du kan f.eks. tilføje det til din WHERE
klausul for kun at returnere rækker, der matcher et givet mønster.
Men ved at tilføje det til WHERE
klausulen er ikke den eneste måde, du kan bruge LIKE
på operatør. Du kan også bruge den til at returnere en boolesk værdi.
Grundlæggende eksempel
Her er et grundlæggende eksempel, der bruger LIKE
operator i en WHERE
klausul.
SELECT * FROM Artist
WHERE Name LIKE 'Black%';
Resultat:
ArtistId Name ---------- ------------------- 11 Black Label Society 12 Black Sabbath 169 Black Eyed Peas
I dette tilfælde ville jeg returnere alle kunstnere, hvis navn starter med Sort .
Procenttegnet er et jokertegn, der matcher nul eller flere af et hvilket som helst tegn (inklusive mellemrum).
Uden jokertegn
Hvis jeg ikke havde brugt jokertegnet, ville jeg ikke have fået nogen resultater.
Her er et eksempel på, hvad jeg mener:
SELECT * FROM Artist
WHERE Name LIKE 'Black';
Resultat:
(Det er med vilje tomt, fordi der ikke var nogen resultater.)
Flere jokertegn
Du kan bruge mere end ét jokertegn, hvis det kræves. I dette eksempel tilføjer jeg endnu en til forsiden af mit mønster.
SELECT * FROM Artist
WHERE Name LIKE '%Black%';
Resultat:
ArtistId Name ---------- ------------------- 11 Black Label Society 12 Black Sabbath 38 Banda Black Rio 137 The Black Crowes 169 Black Eyed Peas
Dette resulterer i, at flere rækker returneres, fordi der er to rækker, der har sort i deres navn, men bare ikke i starten.
Jokertegnet for understregning (_)
Du har også mulighed for at bruge understregningen (_
) jokertegn.
Dette jokertegn matcher nøjagtigt ét tegn (et hvilket som helst tegn).
Overvej følgende tabel kaldet Katte :
CatId CatName ---------- ---------- 1 Brush 2 Brash 3 Broosh 4 100%Fluff 5 100$Fluff
Ja, nogle af de katte har mærkelige navne, men de vil være nyttige.
Her er et eksempel på brug af understregnings-jokertegnet i en forespørgsel mod den tabel.
SELECT * FROM Cats
WHERE CatName LIKE 'Br_sh';
Resultat:
CatId CatName ---------- ---------- 1 Brush 2 Brash
Bemærk, at katten hedder Broosh er ikke inkluderet.
At inkludere Broosh , jeg skal bruge to understregninger:
SELECT * FROM Cats
WHERE CatName LIKE 'Br__sh';
Resultat:
CatId CatName ---------- ---------- 3 Broosh
Dette udelukker dog de to andre katte.
Jeg kunne altid bruge et procenttegn for at inkludere de andre katte.
SELECT * FROM Cats
WHERE CatName LIKE 'Br%sh';
Resultat:
CatId CatName ---------- ---------- 1 Brush 2 Brash 3 Broosh
Husk dog på, at dette også ville returnere navne med mere end to tegn mellem Br og sh .
ESCAPE-klausulen
Nogle gange kan dine data faktisk indeholde jokertegnene. Med andre ord indeholder dataene understregninger eller procenttegn.
Dette kan være et problem, hvis du rent faktisk forsøger at matche understregningen eller procenttegnet som bogstavelig tegn og ikke som et jokertegn.
I min tabel over katte vil du bemærke, at en kat har et procenttegn i sit navn. En anden kat har næsten nøjagtig det samme navn, bortset fra at det i stedet for et procenttegn er et dollartegn.
Her er tabellen igen:
CatId CatName ---------- ---------- 1 Brush 2 Brash 3 Broosh 4 100%Fluff 5 100$Fluff
Hvis jeg ville returnere kun de katte, hvis navne starter med 100%F så bliver jeg nødt til at undslippe % . Hvis jeg ikke undslap dette, ville jeg få uønskede resultater.
Her er, hvad der sker, hvis jeg kører en forespørgsel uden undslipper procenttegnet.
SELECT * FROM Cats
WHERE CatName LIKE '100%F';
Resultat:
CatId CatName ---------- ---------- 4 100%Fluff 5 100$Fluff
I dette tilfælde matchede procenttegnet også dollartegnet, fordi procenttegnet blev behandlet som et jokertegn.
For at sikre, at procenttegnet ikke behandles som et jokertegn, kan vi bruge ESCAPE
klausul.
SELECT * FROM Cats
WHERE CatName LIKE '100\%%F' ESCAPE '\';
Resultat:
CatId CatName ---------- ---------- 4 100%Fluff
Returner en boolesk værdi
Du kan bruge LIKE
operatør for at returnere et 0 eller 1 , alt efter om der er et match eller ej.
Her er et eksempel.
SELECT
CatName,
CatName LIKE 'Br%'
FROM Cats;
Resultat:
CatName CatName LIKE 'Br%' ---------- ------------------ Brush 1 Brash 1 Broosh 1 100%Fluff 0 100$Fluff 0
I dette tilfælde matcher de første tre rækker kriterierne, og de sidste to rækker gør det ikke.
Skabsfølsomhed
Som standard er SQLite LIKE
operatoren skelner mellem 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 Sådan gør du SQLites LIKE-operatør følsomme for store og små bogstaver for eksempler.
Like()-funktionen
En alternativ måde at gøre det på er at bruge like()
fungere.
Denne funktion gør nøjagtig det samme som LIKE
operator, bortset fra at du skal bruge en lidt anden syntaks.
Alle ovenstående eksempler kunne omskrives til at bruge like()
funktion, hvis det kræves.