LIKE
Sintassi
expr LIKE pat [ESCAPE 'escape_char'] expr NOT LIKE pat [ESCAPE 'escape_char']
Spiegazione
Verifica se expr corrisponde al pattern pat. Restituisce 1 (TRUE
) o 0 (FALSE
). Sia expr, sia pat possono essere una qualsiasi espressione valida, e vengono valutati come stringhe. I pattern possono utilizzare i seguenti caratteri jolly:
%
corrisponde a un qualsiasi numero di caratteri, anche zero._
corrisponde a un singolo carattere.
Si può utilizzare NOT LIKE
per verificare se una stringa non corrisponde a un pattern. Equivale a usare l'operatore NOT
sull'intera espressione LIKE
.
Se l'espressione o il pattern sono NULL
, il risultato è NULL
.
LIKE
cerca una corrispondenza case-sensitive (cioè tenendo conto della differenza tra le lettere minuscole e le maiuscole) se la collation dell'espressione è case-sensitive. Per effettuare ricerche case-insensitiva, si può dichiarare che uno degli argomenti ha una collation binaria, utilizzando COLLATE
, oppure convertirli in stringhe binarie
utilizzando CAST
. Si usi SHOW COLLATION
per ottenere la lista delle collation disponibili. Quelle che terminano con _bin
sono case-sensitive.
Gli argomenti numerici sono convertiti in stringhe binarie.
Il carattere jolly _
corrisponde a un singolo carattere, non a un byte. Può corrispondere a un carattere multi-byte solo se questo esiste nel set di caratteri dell'espressione. Per esempio, _
corrisponde a _utf8"€"
, ma non a _latin1"€"
perché il simbolo Euro non esiste nel set di caratteri latin1. Se necessario, si può usare CONVERT
per convertire l'espressione in un differente set di caratteri.
Se si desidera cercare i caratteri _
o %
, è necessario usare un carattere di escape. Per default, il prefisso da utilizzare è il carattere \
. Il backslash è utilizzato sia per codificare caratteri speciali come i caratteri di nuova riga, sia per i caratteri jolly in un pattern. Perciò, per cercare un backslash, occorre usare un doppio escape in questo modo: "\
\
\
\"
.
Per evitare problemi con il backslash, è possibile modificare il carattere di escape specificando la clausola ESCAPE
nell'espressione LIKE
. L'argomento di ESCAPE
deve essere una stringa di un singolo carattere.
Esempi
Seleziona i giorni che cominciano con "T":
CREATE TABLE t1 (d VARCHAR(16)); INSERT INTO t1 VALUES ("Monday"), ("Tuesday"), ("Wednesday"), ("Thursday"), ("Friday"), ("Saturday"), ("Sunday"); SELECT * FROM t1 WHERE d LIKE "T%";
SELECT * FROM t1 WHERE d LIKE "T%"; +----------+ | d | +----------+ | Tuesday | | Thursday | +----------+
Seleziona i giorni che contengono la stringa "es":
SELECT * FROM t1 WHERE d LIKE "%es%";
SELECT * FROM t1 WHERE d LIKE "%es%"; +-----------+ | d | +-----------+ | Tuesday | | Wednesday | +-----------+
Seleziona i nomi dei giorni da sei caratteri:
SELECT * FROM t1 WHERE d like "___day";
SELECT * FROM t1 WHERE d like "___day"; +---------+ | d | +---------+ | Monday | | Friday | | Sunday | +---------+
Con la collation di default, LIKE
è case-insensitive:
SELECT * FROM t1 where d like "t%";
SELECT * FROM t1 where d like "t%"; +----------+ | d | +----------+ | Tuesday | | Thursday | +----------+
Uso di COLLATE
per specificare una collation binaria, forzando il confronto case-sensitive:
SELECT * FROM t1 WHERE d like "t%" COLLATE latin1_bin;
SELECT * FROM t1 WHERE d like "t%" COLLATE latin1_bin; Empty set (0.00 sec)
E' possibile includere funzioni e operatori nell'espressione. Ecco come selezionare le date sulla base del nome del giorno:
CREATE TABLE t2 (d DATETIME); INSERT INTO t2 VALUES ("2007-01-30 21:31:07"), ("1983-10-15 06:42:51"), ("2011-04-21 12:34:56"), ("2011-10-30 06:31:41"), ("2011-01-30 14:03:25"), ("2004-10-07 11:19:34"); SELECT * FROM t2 WHERE DAYNAME(d) LIKE "T%";
SELECT * FROM t2 WHERE DAYNAME(d) LIKE "T%"; +------------------+ | d | +------------------+ | 2007-01-30 21:31 | | 2011-04-21 12:34 | | 2004-10-07 11:19 | +------------------+