Функция SUBSTRING_INDEX возвращает подстроку из строки перед появлениям N вхождений разделителя.

Если N положителен, то возвращается все, что находится слева от последнего разделителя (считая слева). Если N отрицателен, то возвращается все, что находится справа от последнего разделителя (считая справа).

См. также функцию LEFT, которая вырезает символы с начала строки.

См. также функцию RIGHT, которая вырезает символы с конца строки.

См. также функции SUBSTRING и MID которые вырезают символы с любого места строки.

Синтаксис

SELECT SUBSTRING_INDEX(поле, разделитель, количество_разделителей)
	FROM имя_таблицы WHERE условие

Примеры

Все примеры будут по этой таблице texts, если не сказано иное:

id
айди
text
текст
1 слово1-слово2-слово3-слово4-слово5
2 word1-word2-word3-word4-word5

Пример

В данном примере вернется подстрока перед первым вхождением разделителя '-':

SELECT *, SUBSTRING_INDEX(text, '-', 1) as text FROM texts

SQL запрос выберет следующие строки:

id
айди
text
текст
1 слово1
2 word1

Пример

В данном примере вернется подстрока перед вторым вхождением разделителя '-':

SELECT *, SUBSTRING_INDEX(text, '-', 2) as text FROM texts

SQL запрос выберет следующие строки:

id
айди
text
текст
1 слово1-слово2
2 word1-word2

Пример

В данном примере вернется подстрока перед третьим вхождением разделителя '-':

SELECT *, SUBSTRING_INDEX(text, '-', 3) as text FROM texts

SQL запрос выберет следующие строки:

id
айди
text
текст
1 слово1-слово2-слово3
2 word1-word2-word3

Пример

В данном примере вернется подстрока перед первым с конца вхождением разделителя '-':

SELECT *, SUBSTRING_INDEX(text, '-', -1) as text FROM texts

SQL запрос выберет следующие строки:

id
айди
text
текст
1 слово5
2 word5

Пример

В данном примере вернется подстрока перед вторым с конца вхождением разделителя '-':

SELECT *, SUBSTRING_INDEX(text, '-', -2) as text FROM texts

SQL запрос выберет следующие строки:

id
айди
text
текст
1 слово4-слово5
2 word4-word5

Пример

В данном примере вернется подстрока перед третьим с конца вхождением разделителя '-':

SELECT *, SUBSTRING_INDEX(text, '-', -3) as text FROM texts

SQL запрос выберет следующие строки:

id
айди
text
текст
1 слово3-слово4-слово5
2 word3-word4-word5