Рядки

REGEXP_LIKE

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

Синтаксис

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

Повертає true чи false. На відміну від LIKE з його % і _, шаблон — повноцінний регулярний вираз: '^[0-9]+$' — лише цифри, '@' — десь є собачка. Прапорець 'i' вимикає різницю регістру. Оператори ~ і ~* (без огляду на регістр) роблять те саме.

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

employees

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

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

Лише цифри чи ні
SELECT REGEXP_LIKE('12345', '^[0-9]+$') AS only_digits,
REGEXP_LIKE('12a45', '^[0-9]+$') AS with_letter;
only_digitswith_letter
truefalse
Чи правильний формат телефону
SELECT name, phone,
REGEXP_LIKE(phone, '^\+44 [0-9]{4} [0-9]{6}$') AS valid_format
FROM employees;
namephonevalid_format
Emma+44 7700 900123true
LiamNULLNULL
Olivia+44 7700 900456true
Noah+44 7700 900789true
SophiaNULLNULL

\+ — сам знак плюс, [0-9]{4} — рівно чотири цифри.

Те саме оператором
SELECT name
FROM employees
WHERE name ~* '^[a-e]';
name
Emma

~* не зважає на регістр, тож велика E в Emma підходить під [a-e].

Зверни увагу

Шаблон шукає збіг будь-де в рядку: REGEXP_LIKE('abc123', '[0-9]') дає true. Щоб перевірити весь рядок, додай ^ на початку й $ у кінці.

Плюс, крапка, дужки мають особливе значення. Щоб знайти сам символ, пиши перед ним зворотну скісну: '\+'.

REGEXP_LIKE є лише з PostgreSQL 15. У старіших версіях пиши оператор ~.