Функция SUBSTR() в SQL: извлечение подстроки с примерами
SUBSTR(строка, старт, длина) — она же SUBSTRING — вырезает часть строки, начиная с позиции старт (нумерация с 1) заданной длины. Если длину не указать, берётся всё до конца. Аналитик применяет её, чтобы вытащить код из артикула, префикс телефона или домен вместе с INSTR/POSITION.
Синтаксис
SUBSTR(строка, начальная_позиция, длина) — позиции с 1
Примеры использования
Пример 1: Первые 3 символа кода товара
SELECT sku, SUBSTR(sku, 1, 3) AS category_code
FROM products;
Результат:
sku | category_code
EL-1001 | EL-
CL-2050 | CL-
Пример 2: Домен из email через SUBSTR + INSTR
SELECT email,
SUBSTR(email, INSTR(email, '@') + 1) AS domain
FROM users;
Позиции в SUBSTR нумеруются с 1, а не с 0 — частая ошибка у тех, кто пришёл из Python. Отрицательный старт в некоторых СУБД (SQLite, Oracle) отсчитывает с конца, но это не переносимо. Для «части после разделителя» комбинируй с INSTR (SQLite/MySQL) или STRPOS (PostgreSQL), а в PostgreSQL проще взять SPLIT_PART.
Где спрашивают на собеседовании
SUBSTR спрашивают в задачах на парсинг строк: вытащить код, префикс, домен, разобрать составной идентификатор. На собеседовании ценят связку SUBSTR + INSTR для «части строки после/до символа» и знание, что нумерация с единицы.
FAQ: частые вопросы про SUBSTR
В чём разница SUBSTR и SUBSTRING?
Это синонимы: SUBSTR — короткая форма (SQLite, MySQL, Oracle), SUBSTRING — стандарт ANSI (PostgreSQL, SQL Server). В PostgreSQL есть ещё синтаксис SUBSTRING(str FROM start FOR len). Результат одинаковый.
С какой позиции начинается отсчёт в SUBSTR?
С 1 — первый символ имеет позицию 1 (в отличие от Python с индексом 0). SUBSTR(s, 1, 3) вернёт первые три символа.
Как вырезать часть строки после символа?
Найди позицию символа через INSTR (SQLite/MySQL) или STRPOS (PostgreSQL) и передай её +1 как старт: SUBSTR(email, INSTR(email, '@') + 1). В PostgreSQL для разделителей удобнее SPLIT_PART.