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.