В MariaDB, MID()
е синоним на SUBSTRING()
. Връща подниз от даден низ.
Според документацията на MariaDB това е синоним на SUBSTRING(str,pos,len)
синтаксис на SUBSTRING()
, обаче, моите тестове показват, че работи с всички различни форми.
Синтаксис
Според документацията на MariaDB синтаксисът е така:
MID(str,pos,len)
Открих обаче, че работи със следните формуляри (които са същите форми, които SUBSTRING()
поддържа):
MID(str,pos),
MID(str FROM pos),
MID(str,pos,len),
MID(str FROM pos FOR len)
Където str
е низът, pos
е началната позиция на подниза и len
е броят на знаците за извличане.
Пример
Ето един основен пример:
SELECT MID('Drink your beer', 7);
Резултат:
+---------------------------+ | MID('Drink your beer', 7) | +---------------------------+ | your beer | +---------------------------+
Ето същия пример, но с помощта на FROM
синтаксис:
SELECT MID('Drink your beer' FROM 7);
Резултат:
+-------------------------------+ | MID('Drink your beer' FROM 7) | +-------------------------------+ | your beer | +-------------------------------+
Дължина на подниз
Ето пример, който определя дължината на подниз за извличане. Това е единственият синтаксис, който документацията на MariaDB цитира за MID()
функция.
SELECT MID('Drink your beer', 7, 4);
Резултат:
+------------------------------+ | MID('Drink your beer', 7, 4) | +------------------------------+ | your | +------------------------------+
И тук се използва FROM...FOR
синтаксис:
SELECT MID('Drink your beer' FROM 7 FOR 4);
Резултат:
+-------------------------------------+ | MID('Drink your beer' FROM 7 FOR 4) | +-------------------------------------+ | your | +-------------------------------------+
Отрицателна позиция
Посочването на отрицателна стойност за позицията кара началната позиция да се брои назад от края на низа:
SELECT MID('Drink your beer', -9);
Резултат:
+----------------------------+ | MID('Drink your beer', -9) | +----------------------------+ | your beer | +----------------------------+
Отрицателна позиция може да се използва и при използване на FROM
синтаксис:
SELECT MID('Drink your beer' FROM -9 FOR 4);
Резултат:
+--------------------------------------+ | MID('Drink your beer' FROM -9 FOR 4) | +--------------------------------------+ | your | +--------------------------------------+
В този случай задавам и дължина за подниз.
Режим Oracle
Когато сте в режим на Oracle, начална позиция е 0
(нула) се третира като 1
. Въпреки това, начална позиция е 1
също се третира като 1
.
Това е в контраст с други режими, където 0
ще върне празен низ.
Пример:
SET SQL_MODE=ORACLE;
SELECT
MID('Drink your beer', 0) AS "0",
MID('Drink your beer', 1) AS "1";
Резултат:
+-----------------+-----------------+ | 0 | 1 | +-----------------+-----------------+ | Drink your beer | Drink your beer | +-----------------+-----------------+
Ето го в режим по подразбиране:
SET SQL_MODE=DEFAULT;
SELECT
MID('Drink your beer', 0) AS "0",
MID('Drink your beer', 1) AS "1";
Резултат:
+------+-----------------+ | 0 | 1 | +------+-----------------+ | | Drink your beer | +------+-----------------+
Нулеви аргументи
Ако някой (или всички) от аргументите са null
, MID()
функцията връща null
:
SELECT
MID(null, 3, 3),
MID('Beer', null, 3),
MID('Beer', 3, null),
MID(null, null, null);
Резултат:
+-----------------+----------------------+----------------------+-----------------------+ | MID(null, 3, 3) | MID('Beer', null, 3) | MID('Beer', 3, null) | MID(null, null, null) | +-----------------+----------------------+----------------------+-----------------------+ | NULL | NULL | NULL | NULL | +-----------------+----------------------+----------------------+-----------------------+
Липсващи аргументи
Извикване на MID()
без подаване на аргументи води до грешка:
SELECT MID();
Резултат:
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