REGEXP_INSTR
Возвращает позицию совпадения с регулярным выражением в строке.
PostgreSQL 17.9
REGEXP_INSTR(string, pattern[, start[, occurrence[, endoption[, flags[, subexpr]]]]])- [ ]необязательная часть
- string
- Строка, в которой выполняется поискtext
- pattern
- Регулярное выражениеtext
- start
- Позиция начала поиска, по умолчанию 1integerНеобязательный
- occurrence
- Номер совпадения, по умолчанию 1integerНеобязательный
- endoption
- 0 — позиция начала совпадения (по умолчанию), 1 — позиция сразу после его концаintegerНеобязательный01
- flags
- Флаги, например i — без учёта регистраtextНеобязательныйbceimnpqstwx
- subexpr
- Номер группы в скобках, позицию которой нужно вернуть; по умолчанию 0 — всё совпадениеintegerНеобязательный
Возвращаемое значение
Целое число — позиция, начиная с 1; 0, если совпадения нет
Примеры
Позиции совпадений
PostgreSQL 17.9
SELECT REGEXP_INSTR('a1b22c333', '[0-9]+') AS FIRST,
REGEXP_INSTR('a1b22c333', '[0-9]+', 1, 2) AS SECOND,
REGEXP_INSTR('a1b22c333', '[0-9]+', 1, 2, 1) AS after_second,
REGEXP_INSTR('abc', '[0-9]') AS not_found;Где начинается фамилия
PostgreSQL 17.9
SELECT member_name,
REGEXP_INSTR(member_name, '[A-Z]', 1, 2) AS last_name_start
FROM FamilyMembers;Подробности
Функция появилась в PostgreSQL 15. Позиции считаются с 1. Для поиска обычной подстроки без шаблона проще использовать STRPOS или POSITION.