Проблем:
Искате да разделите низ в MySQL.
Пример:
Нашата база данни има таблица с име Student с данни в колоните id и name .
| id | име |
|---|---|
| 1 | Ан Смит |
| 2 | Марк Твен |
| 3 | Брад Грийн |
Нека да извлечем данните от името на колоната и да ги разделим на firstname и lastname .
Решение:
Ще използваме SUBSTRING_INDEX() функция. Ето заявката:
SELECT SUBSTRING_INDEX(name,' ',1) AS firstname, SUBSTRING_INDEX(name,' ',-1) AS lastname FROM Student
Ето резултата от заявката:
| собствено име | фамилия |
|---|---|
| Ан | Смит |
| Отметка | Твен |
| Брад | Зелено |
Дискусия:
Функцията SUBSTRING_INDEX() приема 3 аргумента:изходния низ, разделителя и броя на срещанията на разделителя.
Изходният низ е низът, който бихме искали да разделим.
разделител е низ от знаци, които SUBSTRING_INDEX() функцията търси в изходния низ. Когато бъде намерен, той показва мястото, където завършва поднизът. Ограничителят може да бъде единичен знак като интервал, но може да бъде и шаблон, който се състои от два или повече знака. Този модел е чувствителен към главни букви; тоест има значение дали дадените знаци са главни или малки букви. Не забравяйте, че разделителят е низ, така че трябва да бъде написан в кавички (‘’).
Последният аргумент е броят на събитията . Показва колко пъти трябва да се съпостави шаблонът на разделителя. Имайте предвид, че броят на събитията може да бъде отрицателна стойност. Когато е отрицателен, ние броим появяванията на разделителя отдясно. Когато преброяването е положително число, ние броим отляво.
Функцията извежда всеки знак от изходния низ, докато разделителят не съвпадне с броя пъти, даден от броя на поява.
Ако изпълним следната заявка:
SELECT
SUBSTRING_INDEX('Ann Smith',' ',1);
изходът ще бъде:
Ann
Както можете да видите, функцията върна всички знаци, докато не бъде намерен първият интервал отляво.
В нашия пример извличаме като първо име на ученика всички знаци до първия интервал отляво и като фамилно име на ученика всички знаци до първия интервал отдясно.