W MariaDB, MID()
jest synonimem SUBSTRING()
. Zwraca podciąg z podanego ciągu.
Zgodnie z dokumentacją MariaDB jest to synonim SUBSTRING(str,pos,len)
składnia SUBSTRING()
, jednak moje testy pokazują, że działa ze wszystkimi różnymi formami.
Składnia
Zgodnie z dokumentacją MariaDB składnia wygląda następująco:
MID(str,pos,len)
Jednak odkryłem, że działa z następującymi formularzami (które są tymi samymi formularzami, co SUBSTRING()
obsługuje):
MID(str,pos),
MID(str FROM pos),
MID(str,pos,len),
MID(str FROM pos FOR len)
Gdzie str
jest ciągiem, pos
jest pozycją początkową podciągu, a len
to liczba znaków do wyodrębnienia.
Przykład
Oto podstawowy przykład:
SELECT MID('Drink your beer', 7);
Wynik:
+---------------------------+ | MID('Drink your beer', 7) | +---------------------------+ | your beer | +---------------------------+
Oto ten sam przykład, ale przy użyciu FROM
składnia:
SELECT MID('Drink your beer' FROM 7);
Wynik:
+-------------------------------+ | MID('Drink your beer' FROM 7) | +-------------------------------+ | your beer | +-------------------------------+
Długość podciągu
Oto przykład określający długość podciągu do wyodrębnienia. Jest to jedyna składnia przytaczana w dokumentacji MariaDB dla MID()
funkcja.
SELECT MID('Drink your beer', 7, 4);
Wynik:
+------------------------------+ | MID('Drink your beer', 7, 4) | +------------------------------+ | your | +------------------------------+
A tutaj używa FROM...FOR
składnia:
SELECT MID('Drink your beer' FROM 7 FOR 4);
Wynik:
+-------------------------------------+ | MID('Drink your beer' FROM 7 FOR 4) | +-------------------------------------+ | your | +-------------------------------------+
Pozycja ujemna
Określenie ujemnej wartości pozycji powoduje, że pozycja początkowa jest liczona wstecz od końca ciągu:
SELECT MID('Drink your beer', -9);
Wynik:
+----------------------------+ | MID('Drink your beer', -9) | +----------------------------+ | your beer | +----------------------------+
Pozycja ujemna może być również użyta podczas używania FROM
składnia:
SELECT MID('Drink your beer' FROM -9 FOR 4);
Wynik:
+--------------------------------------+ | MID('Drink your beer' FROM -9 FOR 4) | +--------------------------------------+ | your | +--------------------------------------+
W tym przypadku również ustawiłem długość podłańcucha.
Tryb Oracle
W trybie Oracle pozycja początkowa 0
(zero) jest traktowane jako 1
. Jednak pozycja początkowa 1
jest również traktowany jako 1
.
Jest to w przeciwieństwie do innych trybów, w których 0
zwróci pusty ciąg.
Przykład:
SET SQL_MODE=ORACLE;
SELECT
MID('Drink your beer', 0) AS "0",
MID('Drink your beer', 1) AS "1";
Wynik:
+-----------------+-----------------+ | 0 | 1 | +-----------------+-----------------+ | Drink your beer | Drink your beer | +-----------------+-----------------+
Oto tryb domyślny:
SET SQL_MODE=DEFAULT;
SELECT
MID('Drink your beer', 0) AS "0",
MID('Drink your beer', 1) AS "1";
Wynik:
+------+-----------------+ | 0 | 1 | +------+-----------------+ | | Drink your beer | +------+-----------------+
Argumenty zerowe
Jeśli którykolwiek (lub wszystkie) argumenty są null
, MID()
funkcja zwraca null
:
SELECT
MID(null, 3, 3),
MID('Beer', null, 3),
MID('Beer', 3, null),
MID(null, null, null);
Wynik:
+-----------------+----------------------+----------------------+-----------------------+ | MID(null, 3, 3) | MID('Beer', null, 3) | MID('Beer', 3, null) | MID(null, null, null) | +-----------------+----------------------+----------------------+-----------------------+ | NULL | NULL | NULL | NULL | +-----------------+----------------------+----------------------+-----------------------+
Brakujące argumenty
Wywołanie MID()
bez przekazania żadnych argumentów powoduje błąd:
SELECT MID();
Wynik:
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