sql >> Databasteknik >  >> RDS >> SQLite

Hur LIKE-operatören fungerar i SQLite

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.


  1. SQL Pivot – Vet hur man konverterar rader till kolumner

  2. N+1-redundans och serverkonsolidering

  3. Hur man använder den lagrade proceduren 'sp_server_info' i SQL Server

  4. Azure SQL Database Administration Tips and Hints Exam (DP-300)