В MariaDB, SUBSTRING_INDEX()
е вградена функция низ. Той връща подниз от низ преди определен брой срещания на посочения разделител.
SUBSTRING_INDEX()
изисква при три аргумента; низът, разделителят и броят (т.е. броят на срещанията на този разделител).
Синтаксис
Синтаксисът е така:
SUBSTRING_INDEX(str,delim,count)
Където str
е низът, delim
е разделителят и count
е броят на срещанията на този разделител, който да се използва за определяне на подниз за връщане.
Ако count
е положително, всичко вляво от крайния разделител (като се брои отляво) се връща. Ако count
е отрицателно, всичко вдясно от крайния разделител (като се брои отдясно) се връща.
Пример
Ето един основен пример:
SELECT SUBSTRING_INDEX('/users/homer/docs/cat_vids', '/', 3);
Резултат:
+-------------------------------------------------------+ | SUBSTRING_INDEX('/users/homer/docs/cat_vids', '/', 3) | +-------------------------------------------------------+ | /users/homer | +-------------------------------------------------------+
Отрицателен брой
Посочването на отрицателна стойност за брояча води до преброяването му назад от края на низа:
SELECT SUBSTRING_INDEX('/users/homer/docs/cat_vids', '/', -3);
Резултат:
+--------------------------------------------------------+ | SUBSTRING_INDEX('/users/homer/docs/cat_vids', '/', -3) | +--------------------------------------------------------+ | homer/docs/cat_vids | +--------------------------------------------------------+
Разграничителят не е намерен
Ако разделителят не съществува в низа, се връща целия низ:
SELECT SUBSTRING_INDEX('/users/homer/docs/cat_vids', '.', 3);
Резултат:
+-------------------------------------------------------+ | SUBSTRING_INDEX('/users/homer/docs/cat_vids', '.', 3) | +-------------------------------------------------------+ | /users/homer/docs/cat_vids | +-------------------------------------------------------+
Нулеви аргументи
Ако някой (или всички) от аргументите са null
, SUBSTRING_INDEX()
функцията връща null
:
SELECT
SUBSTRING_INDEX(null, '/', 3) AS "1",
SUBSTRING_INDEX('/users/homer/docs/cat_vids', null, 3) AS "2",
SUBSTRING_INDEX('/users/homer/docs/cat_vids', '/', null) AS "3",
SUBSTRING_INDEX(null, null, null) AS "4";
Резултат:
+------+------+------+------+ | 1 | 2 | 3 | 4 | +------+------+------+------+ | NULL | NULL | NULL | NULL | +------+------+------+------+
Липсващи аргументи
Извикване на SUBSTRING_INDEX()
без подаване на аргументи води до грешка:
SELECT SUBSTRING_INDEX();
Резултат:
ERROR 1582 (42000): Incorrect parameter count in the call to native function 'SUBSTRING_INDEX'