sql >> Database >  >> RDS >> SQLite

Hoe de LIKE-operator werkt in SQLite

In SQLite kun je de LIKE . gebruiken operator in uw zoekopdrachten om een ​​patroonovereenkomst te vergelijken.

U kunt het bijvoorbeeld toevoegen aan uw WHERE clausule om alleen rijen te retourneren die overeenkomen met een bepaald patroon.

Voeg het echter toe aan de WHERE clausule is niet de enige manier waarop u de LIKE . kunt gebruiken exploitant. Je kunt het ook gebruiken om een ​​booleaanse waarde te retourneren.

Basisvoorbeeld

Hier is een eenvoudig voorbeeld dat de LIKE . gebruikt operator in een WHERE clausule.

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

Resultaat:

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

In dit geval wilde ik alle artiesten teruggeven wiens naam begint met Black .

Het percentageteken is een jokerteken dat overeenkomt met nul of meer van een willekeurig teken (inclusief spaties).

Zonder het jokerteken

Als ik het jokerteken niet had gebruikt, zou ik geen resultaten hebben gekregen.

Hier is een voorbeeld van wat ik bedoel:

SELECT * FROM Artist
WHERE Name LIKE 'Black';

Resultaat:

 

(Dat is opzettelijk blanco, omdat er geen resultaten waren.)

Meerdere jokertekens

U kunt indien nodig meer dan één jokerteken gebruiken. In dit voorbeeld voeg ik er nog een toe aan de voorkant van mijn patroon.

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

Resultaat:

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

Dit resulteert in meer rijen die worden geretourneerd, omdat er twee rijen zijn met Zwart in hun naam, maar gewoon niet aan het begin.

Het onderstrepingsteken (_) jokerteken

Je hebt ook de mogelijkheid om het onderstrepingsteken te gebruiken (_ ) jokerteken.

Dit jokerteken komt exact overeen met één teken (elk teken).

Beschouw de volgende tabel met de naam Katten :

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

Ja, sommige van die katten hebben rare namen, maar ze zullen van pas komen.

Hier is een voorbeeld van het gebruik van het underscore-jokerteken in een zoekopdracht voor die tabel.

SELECT * FROM Cats
WHERE CatName LIKE 'Br_sh';

Resultaat:

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

Merk op dat de kat genaamd Broosh is niet inbegrepen.

Om Broosh op te nemen , zou ik twee onderstrepingstekens moeten gebruiken:

SELECT * FROM Cats
WHERE CatName LIKE 'Br__sh';

Resultaat:

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

Dit sluit echter de andere twee katten uit.

Ik zou altijd een percentageteken kunnen gebruiken om de andere katten op te nemen.

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

Resultaat:

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

Houd er echter rekening mee dat dit ook namen oplevert met meer dan twee tekens tussen Br en sh .

De ESCAPE-clausule

Soms bevatten uw gegevens zelfs de jokertekens. Met andere woorden, de gegevens bevatten onderstrepingstekens of percentagetekens.

Dit kan een probleem zijn als u het onderstrepingsteken of het percentageteken daadwerkelijk probeert te gebruiken als letterlijk teken en niet als jokerteken.

In mijn kattentabel zul je zien dat één kat een percentageteken in zijn naam heeft. Een andere kat heeft bijna exact dezelfde naam, behalve dat het in plaats van een procentteken een dollarteken is.

Hier is de tabel weer:

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

Als ik alleen die katten wilde retourneren waarvan de namen beginnen met 100%F dan zou ik moeten ontsnappen aan de % . Als ik hier niet aan zou ontsnappen, zou ik ongewenste resultaten krijgen.

Dit is wat er gebeurt als ik een zoekopdracht uitvoer zonder ontsnappen aan het procentteken.

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

Resultaat:

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

In dit geval kwam het percentageteken ook overeen met het dollarteken, omdat het percentageteken werd behandeld als een jokerteken.

Om ervoor te zorgen dat het procentteken niet als een jokerteken wordt behandeld, kunnen we de ESCAPE gebruiken clausule.

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

Resultaat:

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

Retourneer een Booleaanse waarde

U kunt de LIKE . gebruiken operator om een ​​0 . te retourneren of 1 , afhankelijk van of er een match is of niet.

Hier is een voorbeeld.

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

Resultaat:

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

In dit geval voldoen de eerste drie rijen aan de criteria en de laatste twee rijen niet.

Hoofdlettergevoeligheid

Standaard is de SQLite LIKE operator is niet hoofdlettergevoelig voor ASCII-tekens. Dit betekent dat het overeenkomt met hoofdletters en kleine letters, ongeacht welke hoofdletters je in je patroon gebruikt.

U kunt de case_sensitive_like . gebruiken PRAGMA-instructie om hoofdlettergevoelige overeenkomsten in het ASCII-bereik uit te voeren.

Zie Hoe u de LIKE-operator van SQLite hoofdlettergevoelig maakt voor voorbeelden.

De Like()-functie

Een alternatieve manier om dit te doen is door de like() . te gebruiken functie.

Deze functie doet precies hetzelfde als de LIKE operator, behalve dat u een iets andere syntaxis moet gebruiken.

Alle bovenstaande voorbeelden kunnen worden herschreven om de like() . te gebruiken functie indien nodig.


  1. IS NOT NULL-test voor een record retourneert niet TRUE wanneer variabele is ingesteld

  2. SQL 'LIKE'-query met '%' waarbij de zoekcriteria '%' bevatten

  3. PostgreSQL voor Windows ontwikkelen, deel 1

  4. Java van Oracle op Mac begrijpen