Проблем:
Искате да разделите низ в 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
Както можете да видите, функцията върна всички знаци, докато не бъде намерен първият интервал отляво.
В нашия пример извличаме като първо име на ученика всички знаци до първия интервал отляво и като фамилно име на ученика всички знаци до първия интервал отдясно.