Ce face LIKE
LIKE compară un text cu un model în care două caractere au rol special: % înseamnă „oricâte caractere” (inclusiv niciunul), iar _ înseamnă „exact un caracter”.
Modele uzuale: 'Mon%' (începe cu „Mon”), '%ro' (se termină cu „ro”), '%top%' (conține „top”). Cu NOT LIKE obții rândurile care nu se potrivesc.
Cu setările obișnuite ale tabelelor (colaționare _ci), LIKE nu ține cont de literele mari și mici.
Parametri
| Parametru | Descriere |
|---|---|
model |
Textul căutat, cu % și _. |
Exemple
Exemplele de pe această pagină pornesc de la datele de mai jos. Rulează mai întâi acest cod, apoi exemplul.
CREATE TABLE clienti (
id INT PRIMARY KEY,
nume VARCHAR(50) NOT NULL,
oras VARCHAR(30),
email VARCHAR(100)
);
INSERT INTO clienti VALUES
(1, 'Ana Pop', 'Cluj', 'ana@exemplu.ro'),
(2, 'Bogdan Ionescu', 'Sibiu', NULL),
(3, 'Cristina Marin', 'Cluj', 'cristina@exemplu.ro'),
(4, 'Dan Stoica', 'Arad', NULL);
Exemplul 1: Începe cu, conține
SELECT nume FROM clienti WHERE nume LIKE 'Ana%';
SELECT nume FROM clienti WHERE nume LIKE '%escu%';
Rezultat
+---------+
| nume |
+---------+
| Ana Pop |
+---------+
+----------------+
| nume |
+----------------+
| Bogdan Ionescu |
+----------------+
Exemplul 2: Adrese de e-mail pe un anumit domeniu
SELECT nume, email FROM clienti WHERE email LIKE '%@exemplu.ro' ORDER BY nume;
Rezultat
+----------------+---------------------+
| nume | email |
+----------------+---------------------+
| Ana Pop | ana@exemplu.ro |
| Cristina Marin | cristina@exemplu.ro |
+----------------+---------------------+
Exemplul 3: Exact un caracter cu _
SELECT nume, oras FROM clienti WHERE oras LIKE 'C_uj';
Rezultat
+----------------+------+
| nume | oras |
+----------------+------+
| Ana Pop | Cluj |
| Cristina Marin | Cluj |
+----------------+------+
Greșeli frecvente
- Folosești
LIKE '%text%'pe tabele mari. Un model care începe cu%nu poate folosi indexul, deci MySQL citește tot tabelul. Pentru căutări în texte lungi, folosește un indexFULLTEXT. - Cauți chiar caracterul
%sau_. Pune o bară inversă în față:LIKE '%10\%%'.