REGEXP_SUBSTR() în MySQL

Expresii regulate MySQL 8.0.4+

Returnează bucata de text care se potrivește cu o expresie regulată.

Sintaxă
REGEXP_SUBSTR(expresie, tipar[, pozitie[, aparitie[, optiuni]]])

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 NULL când nu există potrivire. Combină cu COALESCE() 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ă.