LIKE

Stai visualizzando una vecchia versione di questo article. Visualizza la versione più recente.

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 |
+------------------+

Commenti

Sto caricando i commenti......
Content reproduced on this site is the property of its respective owners, and this content is not reviewed in advance by MariaDB. The views, information and opinions expressed by this content do not necessarily represent those of MariaDB or any other party.