В 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