В MariaDB, SUBSTR()
е синоним на SUBSTRING()
.
Това е вградена низова функция, която връща подниз от даден низ.
Изисква поне два аргумента; низа и позицията, от която да се извлече поднизът. Той също така приема незадължителен трети аргумент, който ви позволява да укажете колко дълъг трябва да бъде поднизът.
Синтаксис
Синтаксисът приема следните форми:
SUBSTR(str,pos),
SUBSTR(str FROM pos),
SUBSTR(str,pos,len),
SUBSTR(str FROM pos FOR len)
Където str
е низът, pos
е началната позиция на подниза и len
е броят на знаците за извличане.
Двете формуляри, които използват FROM
ключови думи са стандартен SQL синтаксис.
Пример
Ето един основен пример:
SELECT SUBSTR('Good doggy', 6);
Резултат:
+-------------------------+ | SUBSTR('Good doggy', 6) | +-------------------------+ | doggy | +-------------------------+
Ето същия пример, но използвайки стандартния SQL синтаксис:
SELECT SUBSTR('Good doggy' FROM 6);
Резултат:
+-----------------------------+ | SUBSTR('Good doggy' FROM 6) | +-----------------------------+ | doggy | +-----------------------------+
Дължина на подниз
Ето пример, който определя дължината на подниз за извличане:
SELECT SUBSTR('Good doggy', 6, 3);
Резултат:
+----------------------------+ | SUBSTR('Good doggy', 6, 3) | +----------------------------+ | dog | +----------------------------+
И тук използва стандартен SQL синтаксис:
SELECT SUBSTR('Good doggy' FROM 6 FOR 3);
Резултат:
+-----------------------------------+ | SUBSTR('Good doggy' FROM 6 FOR 3) | +-----------------------------------+ | dog | +-----------------------------------+
Отрицателна позиция
Посочването на отрицателна стойност за позицията кара началната позиция да се брои назад от края на низа:
SELECT SUBSTR('Good doggy', -5);
Резултат:
+--------------------------+ | SUBSTR('Good doggy', -5) | +--------------------------+ | doggy | +--------------------------+
Отрицателна позиция може да се използва и при използване на стандартния SQL синтаксис:
SELECT SUBSTR('Good doggy' FROM -5 FOR 3);
Резултат:
+------------------------------------+ | SUBSTR('Good doggy' FROM -5 FOR 3) | +------------------------------------+ | dog | +------------------------------------+
В този случай задавам и дължина за подниз.
Режим Oracle
Когато сте в режим на Oracle, начална позиция е 0
(нула) се третира като 1
. Въпреки това, начална позиция е 1
също се третира като 1
.
Това е в контраст с други режими, където 0
ще върне празен низ.
Пример:
SET SQL_MODE=ORACLE;
SELECT
SUBSTR('Good doggy', 0) AS "0",
SUBSTR('Good doggy', 1) AS "1";
Резултат:
+------------+------------+ | 0 | 1 | +------------+------------+ | Good doggy | Good doggy | +------------+------------+
Ето го в режим по подразбиране:
SET SQL_MODE=DEFAULT;
SELECT
SUBSTR('Good doggy', 0) AS "0",
SUBSTR('Good doggy', 1) AS "1";
Резултат:
+------+------------+ | 0 | 1 | +------+------------+ | | Good doggy | +------+------------+
Нулеви аргументи
Ако някой (или всички) от аргументите са null
, SUBSTR()
функцията връща null
:
SELECT
SUBSTR(null, 3, 3),
SUBSTR('Doggy', null, 3),
SUBSTR('Doggy', 3, null),
SUBSTR(null, null, null);
Резултат:
+--------------------+--------------------------+--------------------------+--------------------------+ | SUBSTR(null, 3, 3) | SUBSTR('Doggy', null, 3) | SUBSTR('Doggy', 3, null) | SUBSTR(null, null, null) | +--------------------+--------------------------+--------------------------+--------------------------+ | NULL | NULL | NULL | NULL | +--------------------+--------------------------+--------------------------+--------------------------+
Липсващи аргументи
Извикване на SUBSTR()
без подаване на аргументи води до грешка:
SELECT SUBSTR();
Резултат:
ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near ')' at line 1