Dans MariaDB, SUBSTRING()
est une fonction de chaîne intégrée qui renvoie une sous-chaîne à partir d'une chaîne donnée.
SUBSTRING()
nécessite au moins deux arguments ; la chaîne et la position pour laquelle extraire la sous-chaîne. Il accepte également un troisième argument facultatif qui vous permet de spécifier la longueur de la sous-chaîne.
Syntaxe
La syntaxe prend les formes suivantes :
SUBSTRING(str,pos),
SUBSTRING(str FROM pos),
SUBSTRING(str,pos,len),
SUBSTRING(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.
Les deux formes qui utilisent le FROM
mot-clé sont la syntaxe SQL standard.
Exemple
Voici un exemple de base :
SELECT SUBSTRING('Big fat cat', 5);
Résultat :
+-----------------------------+ | SUBSTRING('Big fat cat', 5) | +-----------------------------+ | fat cat | +-----------------------------+
Voici le même exemple, mais en utilisant la syntaxe SQL standard :
SELECT SUBSTRING('Big fat cat' FROM 5);
Résultat :
+---------------------------------+ | SUBSTRING('Big fat cat' FROM 5) | +---------------------------------+ | fat cat | +---------------------------------+
Longueur de la sous-chaîne
Voici un exemple qui spécifie la longueur de la sous-chaîne à extraire :
SELECT SUBSTRING('Big fat cat', 5, 3);
Résultat :
+--------------------------------+ | SUBSTRING('Big fat cat', 5, 3) | +--------------------------------+ | fat | +--------------------------------+
Et ici, il utilise la syntaxe SQL standard :
SELECT SUBSTRING('Big fat cat' FROM 5 FOR 3);
Résultat :
+---------------------------------------+ | SUBSTRING('Big fat cat' FROM 5 FOR 3) | +---------------------------------------+ | fat | +---------------------------------------+
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 SUBSTRING('Big fat cat', -3);
Résultat :
+------------------------------+ | SUBSTRING('Big fat cat', -3) | +------------------------------+ | cat | +------------------------------+
Une position négative peut également être utilisée lors de l'utilisation de la syntaxe SQL standard :
SELECT SUBSTRING('Big fat cat' FROM -7 FOR 3);
Résultat :
+----------------------------------------+ | SUBSTRING('Big fat cat' FROM -7 FOR 3) | +----------------------------------------+ | fat | +----------------------------------------+
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
SUBSTRING('Big fat cat', 0) AS "0",
SUBSTRING('Big fat cat', 1) AS "1";
Résultat :
+-------------+-------------+ | 0 | 1 | +-------------+-------------+ | Big fat cat | Big fat cat | +-------------+-------------+
Le voici en mode par défaut :
SET SQL_MODE=DEFAULT;
SELECT
SUBSTRING('Big fat cat', 0) AS "0",
SUBSTRING('Big fat cat', 1) AS "1";
Résultat :
+------+-------------+ | 0 | 1 | +------+-------------+ | | Big fat cat | +------+-------------+
Arguments nuls
Si l'un (ou tous) des arguments est null
, le SUBSTRING()
la fonction renvoie null
:
SELECT
SUBSTRING(null, 3, 3),
SUBSTRING('Coffee', null, 3),
SUBSTRING('Coffee', 3, null),
SUBSTRING(null, null, null);
Résultat :
+-----------------------+------------------------------+------------------------------+-----------------------------+ | SUBSTRING(null, 3, 3) | SUBSTRING('Coffee', null, 3) | SUBSTRING('Coffee', 3, null) | SUBSTRING(null, null, null) | +-----------------------+------------------------------+------------------------------+-----------------------------+ | NULL | NULL | NULL | NULL | +-----------------------+------------------------------+------------------------------+-----------------------------+
Arguments manquants
Appel de SUBSTRING()
sans passer d'arguments entraîne une erreur :
SELECT SUBSTRING();
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