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