In MariaDB, MID()
is een synoniem voor SUBSTRING()
. Het retourneert een substring van een gegeven string.
Volgens de MariaDB-documentatie is het een synoniem voor de SUBSTRING(str,pos,len)
syntaxis van SUBSTRING()
, maar mijn tests tonen aan dat het met alle verschillende vormen werkt.
Syntaxis
Volgens de MariaDB-documentatie gaat de syntaxis als volgt:
MID(str,pos,len)
Ik heb echter ontdekt dat het werkt met de volgende formulieren (dit zijn dezelfde formulieren die SUBSTRING()
ondersteunt):
MID(str,pos),
MID(str FROM pos),
MID(str,pos,len),
MID(str FROM pos FOR len)
Waar str
is de string, pos
is de startpositie van de substring, en len
is het aantal tekens dat moet worden geëxtraheerd.
Voorbeeld
Hier is een eenvoudig voorbeeld:
SELECT MID('Drink your beer', 7);
Resultaat:
+---------------------------+ | MID('Drink your beer', 7) | +---------------------------+ | your beer | +---------------------------+
Hier is hetzelfde voorbeeld, maar met de FROM
syntaxis:
SELECT MID('Drink your beer' FROM 7);
Resultaat:
+-------------------------------+ | MID('Drink your beer' FROM 7) | +-------------------------------+ | your beer | +-------------------------------+
Lengte subtekenreeks
Hier is een voorbeeld dat de lengte specificeert van de subtekenreeks die moet worden geëxtraheerd. Dit is de enige syntaxis die de MariaDB-documentatie citeert voor de MID()
functie.
SELECT MID('Drink your beer', 7, 4);
Resultaat:
+------------------------------+ | MID('Drink your beer', 7, 4) | +------------------------------+ | your | +------------------------------+
En hier gebruikt het FROM...FOR
syntaxis:
SELECT MID('Drink your beer' FROM 7 FOR 4);
Resultaat:
+-------------------------------------+ | MID('Drink your beer' FROM 7 FOR 4) | +-------------------------------------+ | your | +-------------------------------------+
Negatieve positie
Door een negatieve waarde voor de positie op te geven, wordt de startpositie teruggeteld vanaf het einde van de tekenreeks:
SELECT MID('Drink your beer', -9);
Resultaat:
+----------------------------+ | MID('Drink your beer', -9) | +----------------------------+ | your beer | +----------------------------+
Een negatieve positie kan ook worden gebruikt bij het gebruik van de FROM
syntaxis:
SELECT MID('Drink your beer' FROM -9 FOR 4);
Resultaat:
+--------------------------------------+ | MID('Drink your beer' FROM -9 FOR 4) | +--------------------------------------+ | your | +--------------------------------------+
In dit geval stel ik ook een lengte in voor de substring.
Oracle-modus
In Oracle-modus, een startpositie van 0
(nul) wordt behandeld als 1
. Echter, een startpositie van 1
wordt ook behandeld als 1
.
Dit in tegenstelling tot andere modi, waar 0
zal een lege string teruggeven.
Voorbeeld:
SET SQL_MODE=ORACLE;
SELECT
MID('Drink your beer', 0) AS "0",
MID('Drink your beer', 1) AS "1";
Resultaat:
+-----------------+-----------------+ | 0 | 1 | +-----------------+-----------------+ | Drink your beer | Drink your beer | +-----------------+-----------------+
Hier is het in de standaardmodus:
SET SQL_MODE=DEFAULT;
SELECT
MID('Drink your beer', 0) AS "0",
MID('Drink your beer', 1) AS "1";
Resultaat:
+------+-----------------+ | 0 | 1 | +------+-----------------+ | | Drink your beer | +------+-----------------+
Nullargumenten
Als een (of alle) argumenten null
. zijn , de MID()
functie retourneert null
:
SELECT
MID(null, 3, 3),
MID('Beer', null, 3),
MID('Beer', 3, null),
MID(null, null, null);
Resultaat:
+-----------------+----------------------+----------------------+-----------------------+ | MID(null, 3, 3) | MID('Beer', null, 3) | MID('Beer', 3, null) | MID(null, null, null) | +-----------------+----------------------+----------------------+-----------------------+ | NULL | NULL | NULL | NULL | +-----------------+----------------------+----------------------+-----------------------+
Ontbrekende argumenten
Bellen MID()
zonder het doorgeven van argumenten resulteert in een fout:
SELECT MID();
Resultaat:
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