SELECT email,
SPLIT_PART(email, '@', 2) AS domain
FROM users
LIMIT 3;
Результат:
email | domain anna@yandex.ru | yandex.ru ivan@ozon.ru | ozon.ru maria@vk.com | vk.com
SELECT utm,
SPLIT_PART(utm, '_', 1) AS source,
SPLIT_PART(utm, '_', 2) AS medium
FROM events
LIMIT 3;
Результат:
utm | source | medium vk_cpc | vk | cpc email_promo | email | promo
SELECT path,
SPLIT_PART(path, '/', -1) AS last_segment
FROM events
LIMIT 3;
Результат:
path | last_segment /blog/sql/joins | joins /catalog/phones | phonesПорешать SQL-задачи в тренажёре →
Классика собеса на парсинг колонок — идёт в паре с POSITION и SUBSTRING, когда нужно достать домен, UTM или сегмент пути без регулярок.
Нет, это функция PostgreSQL (и Redshift). В MySQL аналог — SUBSTRING_INDEX(str, delim, n). В SQLite встроенной функции нет: используют комбинацию instr() и substr() или рекурсивный CTE.
Пустую строку '', а не NULL. Например, SPLIT_PART('vk', '_', 2) вернёт ''. Это отличает её от многих других строковых функций, поэтому проверяйте на пустую строку, а не на IS NULL.
В PostgreSQL 14+ передайте отрицательный индекс: SPLIT_PART(str, '/', -1) вернёт последний сегмент. На старых версиях считают число разделителей или используют reverse-трюки, а в MySQL — SUBSTRING_INDEX(str, delim, -1).
SUBSTR · CONCAT · REPLACE · TRIM · UPPER / LOWER · LENGTH
Открыть SQL-тренажёр (565 задач) →