SQLite like()
funktionen gör att du kan jämföra en sträng mot ett givet mönster. Du kan även ange ett escape-tecken om det behövs.
Du kan använda like()
fungerar som ett alternativ till LIKE
operator (som gör att du kan köra Y LIKE X [ESCAPE Z]
uttryck).
Syntax
Du kan använda något av följande:
like(X,Y)
like(X,Y,Z)
X
är mönstretY
är strängenZ
är ett valfritt escape-tecken
Grundläggande exempel
Ta följande tabell:
CatId CatName ---------- ---------- 1 Brush 2 Flutter 3 100%Fluff 4 100$Fluff
Vi kan köra följande kod för att returnera alla rader där kattens namn börjar med bokstaven F:
SELECT * FROM Cats
WHERE like('F%', CatName);
Resultat:
CatId CatName ---------- ---------- 3 Flutter
I det här exemplet använde jag %
jokertecken för att indikera valfritt antal tecken som kan följa (inklusive noll tecken), och att de kan vara vilket tecken som helst.
Understreckets (_) karaktär
Här är ett exempel som använder understrecket (_
) karaktär. Detta jokertecken matchar exakt ett tecken – varken mer eller mindre.
SELECT * FROM Cats
WHERE like('Br_sh', CatName);
Resultat:
CatId CatName ---------- ---------- 1 Brush
Som nämnts matchar den bara ett enda tecken. Så baserat på mina uppgifter kan jag inte göra följande och förvänta mig några matchningar.
SELECT * FROM Cats
WHERE like('Br_', CatName);
Resultat:
(Detta är avsiktligt tomt på grund av inga resultat).
Escape-tecken
Du kan också escape tecken om det behövs. För att göra detta, lägg till escape-tecknet som en tredje parameter (och lägg även till det före tecknet som du vill escape).
SELECT * FROM Cats
WHERE like('100\%F%', CatName, '\');
Resultat:
CatId CatName ---------- ---------- 3 100%Fluff
I det här fallet undkom jag procenttecknet (%
). Jag gjorde detta för att jag letade efter katter som hade ett verkligt procenttecken i sina namn. I det här fallet sökte jag faktiskt efter ett mycket specifikt kattnamn – ett som börjar med 100%F .
Om jag inte hade undgått det, skulle det ha använts som ett jokertecken, och resultaten skulle ha blivit annorlunda.
Det här är vad jag får när jag tar bort escape-karaktären.
SELECT * FROM Cats
WHERE like('100%F%', CatName);
Resultat:
CatId CatName ---------- ---------- 3 100%Fluff 4 100$Fluff
Returnera ett booleskt värde
Du kan använda like()
funktion för att returnera en 0 eller 1 , beroende på om det finns en matchning eller inte.
Detta kan vara praktiskt om du behöver returnera alla rader, men också med en flagga som visar om de matchar dina kriterier eller inte.
Här är ett exempel.
SELECT
CatName,
like('F%', CatName)
FROM Cats;
Resultat:
CatName CatName LIKE 'F%' ---------- ------------------ Brush 0 Flutter 1 100%Fluff 0 100$Fluff 0
I det här fallet matchade bara en rad kriterierna, men vi fick ändå se alla andra rader.
Skiftlägeskänslighet
Som standard är SQLite like()
Funktionen ä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. Den artikeln är skriven för LIKE
operatorn, men den gäller även för like()
funktion.