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 expr_base, à partir du caractère/octet spécifié par expr_début, avec une longueur éventuellement limitée.

Ces fonctions sont synonymes.

Voir aussi :

LEFT, RIGHT

Syntaxe

SUBSTR( <base_expr>, <start_expr> [ , <length_expr> ] )

SUBSTRING( <base_expr>, <start_expr> [ , <length_expr> ] )

Arguments

expr_base

Cela doit être une valeur VARCHAR ou BINARY.

expr_début

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 ».

expr_longueur

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 expr_base (BINARY ou VARCHAR).

Notes sur l’utilisation

  • Si expr_longueur est utilisé, jusqu’à expr_longueur 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 expr_début 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 expr_début 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 est BINARY.

  • 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]                     |
----------+--------+-----+----------------------------+