Dans MariaDB, MID()
est un synonyme de SUBSTRING()
. Il renvoie une sous-chaîne à partir d'une chaîne donnée.
Selon la documentation de MariaDB, c'est un synonyme de SUBSTRING(str,pos,len)
syntaxe de SUBSTRING()
, cependant, mes tests montrent que cela fonctionne avec tous les différents formulaires.
Syntaxe
Selon la documentation de MariaDB, la syntaxe ressemble à ceci :
MID(str,pos,len)
Cependant, j'ai trouvé que cela fonctionne avec les formulaires suivants (qui sont les mêmes formulaires que SUBSTRING()
prend en charge):
MID(str,pos),
MID(str FROM pos),
MID(str,pos,len),
MID(str FROM pos FOR len)
Où str
est la chaîne, pos
est la position de départ de la sous-chaîne, et len
est le nombre de caractères à extraire.
Exemple
Voici un exemple de base :
SELECT MID('Drink your beer', 7);
Résultat :
+---------------------------+ | MID('Drink your beer', 7) | +---------------------------+ | your beer | +---------------------------+
Voici le même exemple, mais en utilisant le FROM
syntaxe :
SELECT MID('Drink your beer' FROM 7);
Résultat :
+-------------------------------+ | MID('Drink your beer' FROM 7) | +-------------------------------+ | your beer | +-------------------------------+
Longueur de la sous-chaîne
Voici un exemple qui spécifie la longueur de la sous-chaîne à extraire. C'est la seule syntaxe que la documentation MariaDB cite pour le MID()
fonction.
SELECT MID('Drink your beer', 7, 4);
Résultat :
+------------------------------+ | MID('Drink your beer', 7, 4) | +------------------------------+ | your | +------------------------------+
Et ici, il utilise FROM...FOR
syntaxe :
SELECT MID('Drink your beer' FROM 7 FOR 4);
Résultat :
+-------------------------------------+ | MID('Drink your beer' FROM 7 FOR 4) | +-------------------------------------+ | your | +-------------------------------------+
Position négative
Si vous spécifiez une valeur négative pour la position, la position de départ est comptée à rebours à partir de la fin de la chaîne :
SELECT MID('Drink your beer', -9);
Résultat :
+----------------------------+ | MID('Drink your beer', -9) | +----------------------------+ | your beer | +----------------------------+
Une position négative peut également être utilisée lors de l'utilisation de FROM
syntaxe :
SELECT MID('Drink your beer' FROM -9 FOR 4);
Résultat :
+--------------------------------------+ | MID('Drink your beer' FROM -9 FOR 4) | +--------------------------------------+ | your | +--------------------------------------+
Dans ce cas, j'ai également défini une longueur pour la sous-chaîne.
Mode Oracle
En mode Oracle, une position de départ de 0
(zéro) est traité comme 1
. Cependant, une position de départ de 1
est également traité comme 1
.
Ceci est en contraste avec les autres modes, où 0
renverra une chaîne vide.
Exemple :
SET SQL_MODE=ORACLE;
SELECT
MID('Drink your beer', 0) AS "0",
MID('Drink your beer', 1) AS "1";
Résultat :
+-----------------+-----------------+ | 0 | 1 | +-----------------+-----------------+ | Drink your beer | Drink your beer | +-----------------+-----------------+
Le voici en mode par défaut :
SET SQL_MODE=DEFAULT;
SELECT
MID('Drink your beer', 0) AS "0",
MID('Drink your beer', 1) AS "1";
Résultat :
+------+-----------------+ | 0 | 1 | +------+-----------------+ | | Drink your beer | +------+-----------------+
Arguments nuls
Si l'un (ou tous) des arguments est null
, le MID()
la fonction renvoie null
:
SELECT
MID(null, 3, 3),
MID('Beer', null, 3),
MID('Beer', 3, null),
MID(null, null, null);
Résultat :
+-----------------+----------------------+----------------------+-----------------------+ | MID(null, 3, 3) | MID('Beer', null, 3) | MID('Beer', 3, null) | MID(null, null, null) | +-----------------+----------------------+----------------------+-----------------------+ | NULL | NULL | NULL | NULL | +-----------------+----------------------+----------------------+-----------------------+
Arguments manquants
Appel de MID()
sans passer d'arguments entraîne une erreur :
SELECT MID();
Résultat :
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