L'uso dell'operatore LIKE con il filtro WHERE in un'istruzione di selezione, permette di ricercare corrispondenze tra i record di una tabella, che rispondano ad un certo pattern di ricerca.
L'istruzione:
SELECT * FROM Prodotti WHERE Descrizione LIKE 'p%'
restituisce tutti i record prodotto la cui descrizione inizi per la lettera 'p'.
Vediamo in dettaglio quali siano le wildcard di LIKE.
Wildcard %
Il simbolo % (percentuale) indica un numero qualsiasi (anche zero) di caratteri alfanumerici. Può ricorrere più volte all'interno di un pattern di ricerca.
SELECT * FROM Prodotti WHERE Descrizione LIKE '%pc%asus%'
L'istruzione precedente cerca tra tutti i prodotti quelli che nella descrizione abbiano le parole 'pc' e 'asus' rigorosamente in questo ordine.
Wildcard _
Il carattere _ (underscore) rappresenta un placeholder valido per un solo carattere. Naturalmente l'underscore può essere ripetuto n volte in sostituzione di altrettanti caratteri.
SELECT * FROM Prodotti WHERE Descrizione LIKE '%2._Ghz%'
L'istruzione restituisce quei prodotti la cui descrizione contenga la parola '2._Ghz' dove al posto dell'underscore può trovare posto qualunque carattere.
Wildcard [ ]
All'interno delle parentesi quadre, l'operatore LIKE accetta range di caratteri, con una sintassi simile a quella in uso per le regular expression. L'istruzione precedente ci permetteva di cercare tutti i prodotti che avessero frequenza da '2.0Ghz' a '2.9Ghz'. Il filtro però avrebbe restituito, se esistenti, anche record di questo tipo: '2.AGhz' o '2. Ghz'.
Vediamo come utilizzare il nuovo pattern per limitare la ricerca.
SELECT * FROM Prodotti WHERE Descrizione LIKE '%2.[0-9]Ghz%'
In questo modo il carattere mancante può solo essere un numero da 0 a 9. Attenzione, nello specificare gli intervalli del range, a rispettare l'ordine naturale dei caratteri imposto dalla collation corrente.
Un errore nell'ordine dell'intervallo dei caratteri porta ad ottenere un resultset di restituzione nullo così come accade nel caso seguente.
SELECT * FROM Prodotti WHERE Descrizione LIKE '%2.[9-0]Ghz%'