Рядки

REGEXP_REPLACE

Замінює частини рядка, що підходять під регулярний вираз.

Синтаксис

REGEXP_REPLACE(<текст>, '<шаблон>', <на що>)
REGEXP_REPLACE(<текст>, '<шаблон>', <на що>, '<прапорці>')

Як REPLACE, але шукає не точний текст, а шаблон: [0-9] — будь-яка цифра, ' +' — один чи кілька пробілів поспіль. Без прапорців замінює лише перше входження; прапорець 'g' — усі, 'i' — без огляду на регістр.

Дані для прикладів

employees

namedepartmentsalarybonusphone
Emmabackend1200300+44 7700 900123
Liambackend1000NULLNULL
Oliviafrontend1350150+44 7700 900456
Noahfrontend950NULL+44 7700 900789
Sophiadesign1200200NULL

Ці таблиці вже створено в пісочниці — приклади нижче працюють із ними. Хочеш повторити у своїй базі — скопіюй SQL.

Цифри — зірочками
SELECT REGEXP_REPLACE('Card 4242 4242', '[0-9]', '*', 'g') AS hidden;
hidden
Card **** ****
Лише цифри з телефону
SELECT name, phone,
REGEXP_REPLACE(phone, '[^0-9]', '', 'g') AS digits
FROM employees;
namephonedigits
Emma+44 7700 900123447700900123
LiamNULLNULL
Olivia+44 7700 900456447700900456
Noah+44 7700 900789447700900789
SophiaNULLNULL

[^0-9] — будь-який символ, крім цифри: плюс і пробіли зникають.

Кілька пробілів — в один
SELECT REGEXP_REPLACE('Emma Wilson', ' +', ' ', 'g') AS cleaned;
cleaned
Emma Wilson

Зверни увагу

Без 'g' замінюється лише перше входження: REGEXP_REPLACE('a1b2', '[0-9]', '') дає ab2.

Крапка в шаблоні означає «будь-який символ»: REGEXP_REPLACE('v1.2.3', '.', '-', 'g') дасть ------. Саму крапку пиши як '\.' — тоді вийде v1-2-3.

Для заміни точного тексту простіший і швидший REPLACE.

Схожі функції