Ce face FIND_IN_SET()
FIND_IN_SET() lucrează cu texte de tipul 'a,b,c' (sau coloane de tip SET). Returnează poziția elementului (de la 1) sau 0 dacă lipsește.
Spre deosebire de LIKE '%promo%', compară elemente întregi: 'promo' nu se potrivește cu 'promotie'.
Parametri
| Parametru | Descriere |
|---|---|
cauta |
Elementul căutat. Nu trebuie să conțină virgulă. |
lista_cu_virgula |
Textul cu elemente separate prin virgulă, fără spații. |
Ce returnează
Poziția elementului, 0 dacă lipsește, NULL dacă un argument este NULL.
Exemple
Exemplele de pe această pagină pornesc de la datele de mai jos. Rulează mai întâi acest cod, apoi exemplul.
CREATE TABLE produse (
id INT PRIMARY KEY,
cod VARCHAR(20),
nume VARCHAR(50),
pret DECIMAL(10,2),
etichete VARCHAR(100)
);
INSERT INTO produse VALUES
(1, 'LAP-2026-01', 'Laptop ultraportabil', 3499.90, 'electronice,birou,promo'),
(2, 'MOU-2025-07', 'Mouse fără fir', 79.50, 'electronice,accesorii'),
(3, 'SCA-2026-03', 'Scaun ergonomic', 1249.00, 'mobilier,birou'),
(4, 'CAB-2024-11', 'Cablu USB-C', 35.00, 'accesorii,promo');
Exemplul 1: Produse cu eticheta „promo”
SELECT nume, etichete
FROM produse
WHERE FIND_IN_SET('promo', etichete) > 0
ORDER BY id;
Rezultat
+----------------------+-------------------------+
| nume | etichete |
+----------------------+-------------------------+
| Laptop ultraportabil | electronice,birou,promo |
| Cablu USB-C | accesorii,promo |
+----------------------+-------------------------+
Exemplul 2: Poziția și atenție la spații
SELECT FIND_IN_SET('b', 'a,b,c') AS fara_spatii,
FIND_IN_SET('b', 'a, b, c') AS cu_spatii;
Rezultat
+-------------+-----------+
| fara_spatii | cu_spatii |
+-------------+-----------+
| 2 | 0 |
+-------------+-----------+
Greșeli frecvente
- Lista conține spații după virgule.
' b'nu este egal cu'b', așa că rezultatul este 0. - Salvezi relații multe-la-multe ca listă cu virgulă. Merge pentru câteva etichete, dar nu poate folosi indexuri. Pentru date reale, folosește un tabel separat.
Comenzi înrudite
FIELD(): Returnează poziția unei valori într-o listă de argumente; util pentru sortări personalizate.SUBSTRING_INDEX(): Returnează textul dinaintea (sau de după) a N-a apariție a unui separator.LIKE: Caută texte după un model: începe cu, se termină cu, conține.