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

Come funziona l'operatore LIKE in SQLite

In SQLite, puoi usare il LIKE operatore nelle tue query per eseguire un confronto di corrispondenza dei modelli.

Ad esempio, puoi aggiungerlo al tuo WHERE clausola per restituire solo le righe che corrispondono a un determinato modello.

Tuttavia, aggiungendolo a WHERE La clausola non è l'unico modo per utilizzare LIKE operatore. Puoi anche usarlo per restituire un valore booleano.

Esempio di base

Ecco un esempio di base che utilizza il LIKE operatore in un WHERE clausola.

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

Risultato:

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

In questo caso volevo restituire tutti gli artisti il ​​cui nome inizia con Black .

Il segno di percentuale è un carattere jolly che corrisponde a zero o più di qualsiasi carattere (inclusi gli spazi).

Senza il carattere jolly

Se non avessi usato il carattere jolly, non avrei ottenuto alcun risultato.

Ecco un esempio di cosa intendo:

SELECT * FROM Artist
WHERE Name LIKE 'Black';

Risultato:

 

(Questo è intenzionalmente vuoto, perché non ci sono stati risultati.)

Più caratteri jolly

È possibile utilizzare più di un carattere jolly, se necessario. In questo esempio ne aggiungo un altro nella parte anteriore del mio pattern.

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

Risultato:

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

Ciò comporta la restituzione di più righe, poiché sono presenti due righe con Nero a loro nome, ma non all'inizio.

Il carattere jolly di sottolineatura (_)

Hai anche la possibilità di utilizzare il trattino basso (_ ) carattere jolly.

Questo carattere jolly corrisponde esattamente a un carattere (qualsiasi carattere).

Considera la seguente tabella chiamata Gatti :

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

Sì, alcuni di quei gatti hanno nomi strani, ma torneranno utili.

Ecco un esempio di utilizzo del carattere jolly di sottolineatura in una query su quella tabella.

SELECT * FROM Cats
WHERE CatName LIKE 'Br_sh';

Risultato:

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

Nota che il gatto si chiamava Broosh non è incluso.

Per includere Broosh , avrei bisogno di usare due caratteri di sottolineatura:

SELECT * FROM Cats
WHERE CatName LIKE 'Br__sh';

Risultato:

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

Tuttavia, questo esclude gli altri due gatti.

Potrei sempre usare un segno di percentuale per includere gli altri gatti.

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

Risultato:

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

Tuttavia, tieni presente che questo restituirebbe anche nomi con più di due caratteri tra Br e sh .

La clausola ESCAPE

A volte i tuoi dati potrebbero effettivamente includere i caratteri jolly. In altre parole, i dati contengono trattini bassi o segni di percentuale.

Questo potrebbe essere un problema se stai effettivamente cercando di abbinare il segno di sottolineatura o il segno di percentuale come carattere letterale e non come carattere jolly.

Nella mia tabella dei gatti, noterai che un gatto ha un segno di percentuale nel suo nome. Un altro gatto ha quasi esattamente lo stesso nome, tranne per il fatto che, invece del segno di percentuale, è il simbolo del dollaro.

Ecco di nuovo la tabella:

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

Se volessi restituire solo quei gatti i cui nomi iniziano con 100%F quindi avrei bisogno di sfuggire al % . Se non fossi sfuggito a questo, otterrei risultati indesiderati.

Ecco cosa succede se eseguo una query senza evadendo il segno di percentuale.

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

Risultato:

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

In questo caso il segno di percentuale corrispondeva anche al segno del dollaro, perché il segno di percentuale veniva trattato come un carattere jolly.

Per garantire che il segno di percentuale non venga trattato come un carattere jolly, possiamo utilizzare ESCAPE clausola.

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

Risultato:

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

Restituisce un valore booleano

Puoi usare il LIKE operatore per restituire uno 0 o 1 , a seconda che ci sia una corrispondenza o meno.

Ecco un esempio.

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

Risultato:

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

In questo caso, le prime tre righe corrispondono ai criteri e le ultime due righe no.

Maiuscole/minuscole

Per impostazione predefinita, SQLite LIKE l'operatore non fa distinzione tra maiuscole e minuscole per i caratteri ASCII. Ciò significa che corrisponderà ai caratteri maiuscoli e minuscoli, indipendentemente da quale maiuscolo utilizzi nel tuo modello.

Puoi utilizzare il case_sensitive_like Istruzione PRAGMA per eseguire corrispondenze con distinzione tra maiuscole e minuscole nell'intervallo ASCII.

Vedi Come rendere l'operatore LIKE di SQLite case-sensitive per esempi.

La funzione Like()

Un modo alternativo per farlo è usare like() funzione.

Questa funzione fa esattamente la stessa cosa di LIKE operatore, tranne per il fatto che è necessario utilizzare una sintassi leggermente diversa.

Tutti gli esempi precedenti possono essere riscritti per utilizzare like() funzione se richiesta.