SELECT email,
POSITION('@' IN email) AS at_pos
FROM users
LIMIT 3;
Результат:
email | at_pos anna@yandex.ru | 5 ivan@ozon.ru | 5 maria.k@vk.com | 8
SELECT url,
STRPOS(url, '?') AS q_pos
FROM events
LIMIT 3;
Результат:
url | q_pos /catalog?page=2 | 9 /order | 0 /search?q=sql | 8
SELECT id, utm_source
FROM orders
WHERE POSITION('promo' IN utm_source) > 0;
Результат:
id | utm_source 17 | promo_summer 42 | promo_vkПорешать SQL-задачи в тренажёре →
Спрашивают в задачах на парсинг строк — почти всегда в паре с SUBSTRING/SUBSTR, чтобы вырезать домен из email или сегмент из пути.
Результат одинаковый — оба возвращают позицию первого вхождения. Разница только в синтаксисе: POSITION(sub IN str) — стандартный ANSI-вариант, а STRPOS(str, sub) — функция PostgreSQL с обычным порядком аргументов (сначала строка, потом подстрока).
Нет, встроенного INSTR в PostgreSQL нет — используйте POSITION или STRPOS. INSTR доступен в SQLite и MySQL. Если переносите запрос из SQLite в PostgreSQL, замените INSTR(str, sub) на STRPOS(str, sub).
Возвращает 0, а не NULL. Поэтому проверка наличия подстроки пишется как POSITION('x' IN col) > 0. Нумерация позиций одинаковая во всех диалектах — с единицы, а не с нуля.
Строковые функции · null-handling
COALESCE · NULLIF · COUNT · SUBSTR · CAST · CONCAT
Открыть SQL-тренажёр (565 задач) →