I SQLite kan du använda LIKE
operatorn i dina frågor för att göra en mönstermatchningsjämförelse.
Du kan till exempel lägga till den i din WHERE
sats för att endast returnera rader som matchar ett givet mönster.
Men att lägga till den i WHERE
klausulen är inte det enda sättet du kan använda LIKE
operatör. Du kan också använda den för att returnera ett booleskt värde.
Grundläggande exempel
Här är ett grundläggande exempel som använder 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 det här fallet ville jag returnera alla artister vars namn börjar med Svart .
Procenttecknet är ett jokertecken som matchar noll eller fler av alla tecken (inklusive mellanslag).
Utan jokertecken
Om jag inte hade använt jokertecken hade jag inte fått några resultat.
Här är ett exempel på vad jag menar:
SELECT * FROM Artist
WHERE Name LIKE 'Black';
Resultat:
(Detta är avsiktligt tomt, eftersom det inte fanns några resultat.)
Flera jokertecken
Du kan använda mer än ett jokertecken om det behövs. I det här exemplet lägger jag till en till på framsidan av mitt 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
Detta resulterar i att fler rader returneras, eftersom det finns två rader som har svart i deras namn, men bara inte i början.
Jokertecken för understreck (_)
Du har också möjlighet att använda understrecket (_
) jokertecken.
Detta jokertecken matchar exakt ett tecken (vilket som helst).
Tänk på följande tabell som heter Katter :
CatId CatName ---------- ---------- 1 Brush 2 Brash 3 Broosh 4 100%Fluff 5 100$Fluff
Ja, några av dessa katter har konstiga namn, men de kommer väl till pass.
Här är ett exempel på hur understrecket jokertecken används i en fråga mot den tabellen.
SELECT * FROM Cats
WHERE CatName LIKE 'Br_sh';
Resultat:
CatId CatName ---------- ---------- 1 Brush 2 Brash
Lägg märke till att katten heter Broosh ingår inte.
Att inkludera Broosh , jag skulle behöva använda två understreck:
SELECT * FROM Cats
WHERE CatName LIKE 'Br__sh';
Resultat:
CatId CatName ---------- ---------- 3 Broosh
Detta utesluter dock de andra två katterna.
Jag skulle alltid kunna använda ett procenttecken för att inkludera de andra katterna.
SELECT * FROM Cats
WHERE CatName LIKE 'Br%sh';
Resultat:
CatId CatName ---------- ---------- 1 Brush 2 Brash 3 Broosh
Kom dock ihåg att detta även skulle returnera namn med mer än två tecken mellan Br och sh .
ESCAPE-klausulen
Ibland kan din data faktiskt innehålla jokertecken. Med andra ord innehåller uppgifterna understreck eller procenttecken.
Det här kan vara ett problem om du faktiskt försöker matcha understrecket eller procenttecknet som bokstavligt tecken och inte som ett jokertecken.
I min tabell över katter kommer du att märka att en katt har ett procenttecken i sitt namn. En annan katt har nästan exakt samma namn, förutom att det istället för ett procenttecken är ett dollartecken.
Här är tabellen igen:
CatId CatName ---------- ---------- 1 Brush 2 Brash 3 Broosh 4 100%Fluff 5 100$Fluff
Om jag ville returnera bara de katter vars namn börjar med 100%F då skulle jag behöva undkomma % . Om jag inte undkom detta skulle jag få oönskade resultat.
Här är vad som händer om jag kör en fråga utan undslipper procenttecknet.
SELECT * FROM Cats
WHERE CatName LIKE '100%F';
Resultat:
CatId CatName ---------- ---------- 4 100%Fluff 5 100$Fluff
I det här fallet matchade procenttecknet också dollartecknet, eftersom procenttecknet behandlades som ett jokertecken.
För att säkerställa att procenttecknet inte behandlas som ett jokertecken kan vi använda ESCAPE
klausul.
SELECT * FROM Cats
WHERE CatName LIKE '100\%%F' ESCAPE '\';
Resultat:
CatId CatName ---------- ---------- 4 100%Fluff
Returnera ett booleskt värde
Du kan använda LIKE
operatör för att returnera en 0 eller 1 , beroende på om det finns en matchning eller inte.
Här är ett exempel.
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 det här fallet matchar de tre första raderna kriterierna, och de två sista raderna inte.
Skiftlägeskänslighet
Som standard är SQLite LIKE
operatorn är skiftlägeskänslig för ASCII-tecken. Det betyder att den matchar versaler och gemener, oavsett vilket skiftläge du använder i ditt mönster.
Du kan använda case_sensitive_like PRAGMA-sats för att utföra skiftlägeskänsliga matchningar i ASCII-intervallet.
Se hur man gör SQLites LIKE-operatör skiftlägeskänslig för exempel.
Like()-funktionen
Ett alternativt sätt att göra det är att använda like()
fungera.
Den här funktionen gör exakt samma sak som LIKE
operator, förutom att du behöver använda en lite annan syntax.
Alla ovanstående exempel skulle kunna skrivas om för att använda like()
funktion om det behövs.