Ce face REGEXP_SUBSTR()
REGEXP_SUBSTR() extrage prima potrivire (sau a N-a, cu parametrul aparitie). Dacă nu găsește nimic, returnează NULL.
Parametri
| Parametru | Descriere |
|---|---|
expresie |
Textul în care se caută. |
tipar |
Expresia regulată. |
pozitie |
Opțional. De unde începe căutarea. |
aparitie |
Opțional. A câta potrivire (implicit 1). |
optiuni |
Opțional. Ca la REGEXP_LIKE(). |
Ce returnează
Textul găsit sau NULL.
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),
oras VARCHAR(30),
email VARCHAR(100),
telefon VARCHAR(20)
);
INSERT INTO clienti VALUES
(1, 'Ana Pop', 'Iași', 'ana.pop@exemplu.ro', '0722-123-456'),
(2, 'bogdan ionescu', 'Cluj-Napoca', 'bogdan@firma.ro', '0744 555 101'),
(3, 'Cristina Marin', 'Brașov', 'cristina@exemplu.ro', '0733.222.909'),
(4, 'Dan Stoica', 'Timișoara', NULL, '0755123123');
Exemplul 1: Primul și al doilea număr dintr-un text
SELECT REGEXP_SUBSTR('Comanda nr. 1024 din 2026', '[0-9]+') AS primul,
REGEXP_SUBSTR('Comanda nr. 1024 din 2026', '[0-9]+', 1, 2) AS al_doilea;
Rezultat
+--------+-----------+
| primul | al_doilea |
+--------+-----------+
| 1024 | 2026 |
+--------+-----------+
Exemplul 2: Domeniul din email
SELECT email, REGEXP_SUBSTR(email, '[^@]+$') AS domeniu
FROM clienti
ORDER BY id;
Rezultat
+---------------------+------------+
| email | domeniu |
+---------------------+------------+
| ana.pop@exemplu.ro | exemplu.ro |
| bogdan@firma.ro | firma.ro |
| cristina@exemplu.ro | exemplu.ro |
| NULL | NULL |
+---------------------+------------+
Greșeli frecvente
- Nu tratezi cazul
NULLcând nu există potrivire. Combină cuCOALESCE()dacă ai nevoie de o valoare implicită.
Comenzi înrudite
REGEXP_INSTR(): Returnează poziția la care începe (sau se termină) o potrivire cu o expresie regulată.SUBSTRING_INDEX(): Returnează textul dinaintea (sau de după) a N-a apariție a unui separator.REGEXP_REPLACE(): Înlocuiește bucățile de text care se potrivesc cu o expresie regulată.