Справочник по функциям

SUBSTRING_INDEX

Аналог в PostgreSQL:

Возвращает часть строки до заданного вхождения разделителя.

MySQL 8.1
SUBSTRING_INDEX(str, delimiter, count)

Параметры

strVARCHAR
Исходная строка
delimiterVARCHAR
Разделитель, регистр учитывается
countINT
Номер вхождения разделителя, отрицательный отсчитывается с конца строки

Возвращаемое значение

Часть строки левее count-го разделителя, а при отрицательном count — правее count-го разделителя с конца; вся строка, если разделителей меньше; пустая строка при count = 0

Примеры

Часть до второй точки

MySQL 8.1
SELECT SUBSTRING_INDEX('www.mysql.com', '.', 2);
SUBSTRING_INDEX('www.mysql.com', '.', 2)
www.mysql

Часть после второй точки с конца

MySQL 8.1
SELECT SUBSTRING_INDEX('www.mysql.com', '.', -2);
SUBSTRING_INDEX('www.mysql.com', '.', -2)
mysql.com

Домен из email

MySQL 8.1
SELECT email,
	SUBSTRING_INDEX(email, '@', -1) AS domain
FROM Users
LIMIT 5;
emaildomain
barjam@hotmail.comhotmail.com
tellis@me.comme.com
metzzo@superhotmail.comsuperhotmail.com
ralamosm@verizon.netverizon.net
barjam@hotmail.comhotmail.com

Подробности

Чтобы взять одну часть строки по номеру, как SPLIT_PART в PostgreSQL, вложите два вызова: сначала отрежьте всё после n-го разделителя, затем возьмите последнюю часть. SUBSTRING_INDEX(SUBSTRING_INDEX('www.mysql.com', '.', 2), '.', -1) вернёт mysql.

Смотрите также