В MariaDB можете да използвате SUBSTRING_INDEX()
функция за връщане на всичко преди или след определен знак (или знаци) в низ.
Тази функция приема три аргумента; низът, разделителят и броят на срещанията на този разделител, които да се използват за определяне на подниз за връщане.
Примери
Можем да видим как работи функцията в следните примери.
Изберете всичко преди
За да изберете всичко преди определен знак, направете третия аргумент положителна стойност:
SELECT SUBSTRING_INDEX('Red,Green,Blue', ',', 2);
Резултат:
Red,Green
В този пример избираме всичко преди втората запетая. Това се прави чрез използване на запетая (,
) като разделител и 2
като броят.
Използвах запетая в този пример, но можеше да е всеки знак или низ:
SELECT SUBSTRING_INDEX('Red or Green or Blue', ' or ', 2);
Резултат:
Red or Green
Изберете всичко след
Използвайте отрицателна стойност, за да изберете всичко след определен знак:
SELECT SUBSTRING_INDEX('Red,Green,Blue', ',', -2);
Резултат:
Green,Blue
Имайте предвид, че отрицателната стойност означава, че ще се брои отдясно, след което изберете подниз отдясно на разделителя.
Когато разделителят не е намерен
Ако разделителят не е намерен в низа, низът се връща изцяло.
Пример:
SELECT SUBSTRING_INDEX('Red,Green,Blue', '-', 1);
Резултат:
Red,Green,Blue
В този случай целият низ се връща изцяло, защото използвахме тире (-
) като разделител, но в низа нямаше тирета.
Ще получим същия резултат, ако низът прави съдържа разделителя, но нашия count
надвишава броя на разделителите в низа.
Пример:
SELECT SUBSTRING_INDEX('Red,Green,Blue', ',', 10);
Резултат:
Red,Green,Blue
Чувствителност на главни и малки букви
SUBSTRING_INDEX()
функцията извършва чувствително търсене на разделителя. Това означава, че разделителят трябва да е с правилния регистър, преди да съвпадне.
Неправилен регистър
Ето пример, когато случаят не съвпада:
SELECT SUBSTRING_INDEX('Red and green and blue', 'AND', 2);
Резултат:
Red and green and blue
Получаваме целия низ изцяло.
Правилен случай
Сега ето същия пример, но където случаят съвпада:
SELECT SUBSTRING_INDEX('Red and green and blue', 'and', 2);
Резултат:
Red and green