- Catégories :
Fonctions de chaîne et fonctions binaires (Correspondance/Comparaison)
SUBSTR , SUBSTRING¶
Renvoie la partie de la chaîne ou de la valeur binaire de base_expr
, à partir du caractère/octet spécifié par start_expr
, avec une longueur éventuellement limitée.
Ces fonctions sont synonymes.
Syntaxe¶
SUBSTR( <base_expr>, <start_expr> [ , <length_expr> ] )
SUBSTRING( <base_expr>, <start_expr> [ , <length_expr> ] )
Arguments¶
base_expr
Cela doit être une valeur
VARCHAR
ouBINARY
.start_expr
La position de départ doit être une expression dont le résultat est un entier. Elle spécifie le décalage à partir duquel la sous-chaîne commence. Le décalage est mesuré ainsi :
Le nombre de caractères UTF-8 si l’entrée est
VARCHAR
.Le nombre d’octets si l’entrée est
BINARY
.
La position de départ est basée sur 1 et non sur 0.
SUBSTR('abc', 1, 1)
renvoie « a » et non « b ».length_expr
La longueur doit être une expression dont le résultat est un entier. Elle convient d’indiquer :
Le nombre de caractères UTF-8 à renvoyer si l’entrée est
VARCHAR
.Le nombre d’octets à renvoyer si l’entrée est
BINARY
.
La longueur doit être supérieure ou égale à zéro. Si la longueur est un nombre négatif, la fonction renvoie une chaîne vide.
Renvoie¶
Le type de données de la valeur renvoyée est identique à celui de base_expr
(BINARY
ou VARCHAR
).
Notes sur l’utilisation¶
Si
length_expr
est utilisé, jusqu’àlength_expr
caractères/octets sont renvoyés, sinon tous les caractères jusqu’à la fin de la chaîne ou de la valeur binaire sont renvoyés.Les valeurs dans
start_expr
commencent à 1 :Si un 0 est spécifié, il est traité comme 1.
Si une valeur négative est spécifiée, la position de départ est calculée en tant que
start_expr
caractères/octets à partir de la fin de la chaîne ou de la valeur binaire. Si la position est en dehors de la plage d’une chaîne ou d’une valeur binaire, une valeur vide est renvoyée.
Si l’une des entrées est NULL, NULL est renvoyé.
Détails du classement¶
Le classement s’applique aux entrées
VARCHAR
. Le classement ne s’applique pas si le type de données en entrée du premier paramètre estBINARY
.No impact. Bien que les classements soient acceptés syntaxiquement, ils n’ont aucune incidence sur le traitement. Par exemple, les langues avec des lettres à deux caractères et à trois caractères (par exemple « dzs » en hongrois, « ch » en tchèque) comptent toujours celles-ci comme deux ou trois caractères (pas un caractère) pour l’argument de longueur.
The collation of the result is the same as the collation of the input. Cela peut être utile si la valeur renvoyée est transmise à une autre fonction dans le cadre d’appels de fonctions imbriquées.
Exemples¶
SELECT SUBSTR('testing 1 2 3', 9, 5) FROM x;
-------------------------------+
substr('testing 1 2 3', 9, 5) |
-------------------------------+
1 2 3 |
-------------------------------+
SELECT '123456', pos, len, SUBSTR('123456', pos, len) FROM o;
----------+--------+-----+----------------------------+
'123456' | pos | len | substr('123456', pos, len) |
----------+--------+-----+----------------------------+
123456 | -1 | 3 | 6 |
123456 | -3 | 3 | 456 |
123456 | -3 | 7 | 456 |
123456 | -5 | 3 | 234 |
123456 | -7 | 3 | |
123456 | 0 | 3 | 123 |
123456 | 0 | 7 | 123456 |
123456 | 1 | 3 | 123 |
123456 | 3 | 3 | 345 |
123456 | 3 | 7 | 3456 |
123456 | 5 | 3 | 56 |
123456 | 5 | 7 | 56 |
123456 | 7 | 3 | |
123456 | [NULL] | 3 | [NULL] |
123456 | [NULL] | 7 | [NULL] |
----------+--------+-----+----------------------------+