SQLite
 sql >> Datenbank >  >> RDS >> SQLite

Funktionsweise des LIKE-Operators in SQLite

In SQLite können Sie den LIKE verwenden -Operator in Ihren Abfragen, um einen Musterabgleichsvergleich durchzuführen.

Sie können es beispielsweise zu Ihrem WHERE hinzufügen -Klausel, um nur Zeilen zurückzugeben, die einem bestimmten Muster entsprechen.

Fügen Sie es jedoch dem WHERE hinzu -Klausel ist nicht die einzige Möglichkeit, den LIKE zu verwenden Operator. Sie können es auch verwenden, um einen booleschen Wert zurückzugeben.

Einfaches Beispiel

Hier ist ein einfaches Beispiel, das den LIKE verwendet Operator in einem WHERE Klausel.

SELECT * FROM Artist
WHERE Name LIKE 'Black%';

Ergebnis:

ArtistId    Name               
----------  -------------------
11          Black Label Society
12          Black Sabbath      
169         Black Eyed Peas    

In diesem Fall wollte ich alle Künstler zurückgeben, deren Namen mit Schwarz beginnen .

Das Prozentzeichen ist ein Platzhalterzeichen, das mit keinem oder mehreren beliebigen Zeichen (einschließlich Leerzeichen) übereinstimmt.

Ohne Wildcard

Wenn ich das Platzhalterzeichen nicht verwendet hätte, hätte ich keine Ergebnisse erhalten.

Hier ist ein Beispiel dafür, was ich meine:

SELECT * FROM Artist
WHERE Name LIKE 'Black';

Ergebnis:

 

(Das ist absichtlich leer, weil es keine Ergebnisse gab.)

Mehrere Platzhalter

Sie können bei Bedarf mehr als ein Platzhalterzeichen verwenden. In diesem Beispiel füge ich ein weiteres vor meinem Muster hinzu.

SELECT * FROM Artist
WHERE Name LIKE '%Black%';

Ergebnis:

ArtistId    Name               
----------  -------------------
11          Black Label Society
12          Black Sabbath      
38          Banda Black Rio    
137         The Black Crowes   
169         Black Eyed Peas    

Dies führt dazu, dass mehr Zeilen zurückgegeben werden, da es zwei Zeilen mit Schwarz gibt in ihrem Namen, aber eben nicht am Anfang.

Der Unterstrich (_) Platzhalter

Sie haben auch die Möglichkeit, den Unterstrich (_ ) Platzhalter.

Dieses Platzhalterzeichen entspricht genau einem Zeichen (beliebiges Zeichen).

Betrachten Sie die folgende Tabelle namens Cats :

CatId       CatName   
----------  ----------
1           Brush     
2           Brash     
3           Broosh    
4           100%Fluff 
5           100$Fluff 

Ja, einige dieser Katzen haben seltsame Namen, aber sie werden sich als nützlich erweisen.

Hier ist ein Beispiel für die Verwendung des Unterstrich-Platzhalters in einer Abfrage für diese Tabelle.

SELECT * FROM Cats
WHERE CatName LIKE 'Br_sh';

Ergebnis:

CatId       CatName   
----------  ----------
1           Brush     
2           Brash       

Beachten Sie, dass die Katze Broosh heißt ist nicht enthalten.

Um Broosh einzuschließen , müsste ich zwei Unterstriche verwenden:

SELECT * FROM Cats
WHERE CatName LIKE 'Br__sh';

Ergebnis:

CatId       CatName   
----------  ----------
3           Broosh       

Dies schließt jedoch die anderen beiden Katzen aus.

Ich könnte immer ein Prozentzeichen verwenden, um die anderen Katzen einzubeziehen.

SELECT * FROM Cats
WHERE CatName LIKE 'Br%sh';

Ergebnis:

CatId       CatName   
----------  ----------
1           Brush     
2           Brash     
3           Broosh      

Beachten Sie jedoch, dass dies auch Namen mit mehr als zwei Zeichen zwischen Br zurückgeben würde und sh .

Die ESCAPE-Klausel

Manchmal können Ihre Daten tatsächlich die Platzhalterzeichen enthalten. Mit anderen Worten, die Daten enthalten Unterstriche oder Prozentzeichen.

Dies könnte ein Problem sein, wenn Sie tatsächlich versuchen, den Unterstrich oder das Prozentzeichen als wörtliches Zeichen und nicht als Platzhalter zu finden.

In meiner Katzentabelle werden Sie feststellen, dass eine Katze ein Prozentzeichen in ihrem Namen hat. Eine andere Katze hat fast genau den gleichen Namen, außer dass es statt eines Prozentzeichens ein Dollarzeichen ist.

Hier ist noch einmal die Tabelle:

CatId       CatName   
----------  ----------
1           Brush     
2           Brash     
3           Broosh    
4           100%Fluff 
5           100$Fluff 

Wenn ich nur die Katzen zurückgeben wollte, deren Namen mit 100%F beginnen dann müsste ich dem % entkommen . Wenn ich dem nicht entkommen würde, würde ich unerwünschte Ergebnisse erhalten.

Folgendes passiert, wenn ich eine Abfrage ohne ausführe das Prozentzeichen maskieren.

SELECT * FROM Cats
WHERE CatName LIKE '100%F';

Ergebnis:

CatId       CatName   
----------  ----------
4           100%Fluff 
5           100$Fluff 

In diesem Fall stimmte das Prozentzeichen auch mit dem Dollarzeichen überein, da das Prozentzeichen als Platzhalterzeichen behandelt wurde.

Um sicherzustellen, dass das Prozentzeichen nicht als Platzhalterzeichen behandelt wird, können wir den ESCAPE verwenden Klausel.

SELECT * FROM Cats
WHERE CatName LIKE '100\%%F' ESCAPE '\';

Ergebnis:

CatId       CatName   
----------  ----------
4           100%Fluff 

Gib einen booleschen Wert zurück

Sie können den LIKE verwenden -Operator, um eine 0 zurückzugeben oder 1 , abhängig davon, ob es eine Übereinstimmung gibt oder nicht.

Hier ist ein Beispiel.

SELECT 
  CatName,
  CatName LIKE 'Br%' 
FROM Cats;

Ergebnis:

CatName     CatName LIKE 'Br%'
----------  ------------------
Brush       1                 
Brash       1                 
Broosh      1                 
100%Fluff   0                 
100$Fluff   0                 

In diesem Fall stimmen die ersten drei Zeilen mit den Kriterien überein und die letzten beiden Zeilen nicht.

Groß- und Kleinschreibung

Standardmäßig ist die SQLite LIKE Operator ist case-insensitive für ASCII-Zeichen. Das bedeutet, dass Groß- und Kleinbuchstaben übereinstimmen, unabhängig davon, welche Schreibweise Sie in Ihrem Muster verwenden.

Sie können case_sensitive_like verwenden PRAGMA-Anweisung zur Durchführung von Übereinstimmungen mit Berücksichtigung der Groß-/Kleinschreibung im ASCII-Bereich.

Beispiele finden Sie unter So machen Sie den LIKE-Operator von SQLite unter Berücksichtigung der Groß- und Kleinschreibung.

Die Like()-Funktion

Alternativ können Sie auch like() verwenden Funktion.

Diese Funktion macht genau dasselbe wie LIKE -Operator, außer dass Sie eine etwas andere Syntax verwenden müssen.

Alle obigen Beispiele könnten umgeschrieben werden, um like() zu verwenden Funktion falls erforderlich.