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.

Voir aussi :

LEFT, RIGHT

Syntaxe

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

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

Arguments

base_expr

Cela doit être une valeur VARCHAR ou BINARY.

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