Функция 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;

Результат:

email          | domain
anna@mail.ru   | mail.ru
Порешать SQL-задачи в тренажёре →

Типичная ошибка

Позиции в 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.

Задачи в тренажёре по теме

Вопросы с собеседований по теме

Смежные темы SQL

Строковые функции

Другие функции SQL

CONCAT · REPLACE · TRIM · UPPER / LOWER · LENGTH · POSITION

Открыть SQL-тренажёр (565 задач) →