sql >> Database teknologi >  >> RDS >> SQLite

Sådan fungerer LIKE-operatøren i SQLite

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.


  1. Gør SQL Server-ydeevne let

  2. Opretter forbindelse til 4D fra Java

  3. Identitetskolonnens værdi springer pludselig til 1001 i sql-serveren

  4. Ret "SQL-server blokerede adgang til ERKLÆRING 'OpenRowset/OpenDatasource' for komponenten 'Ad Hoc Distributed Queries'