Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.
SUBSTRINGfonction
Renvoie le sous-ensemble d’une chaîne sur la base de la position de départ spécifiée.
Si l’entrée est une chaîne de caractères, la position de départ et le nombre de caractères extraits sont basés sur les caractères, pas les octets, afin que les caractères à plusieurs octets soient comptés comme des caractères uniques. Si l’entrée est une expression binaire, la position de départ et la sous-chaîne extraite sont basées sur des octets. Vous ne pouvez pas spécifier de longueur négative, mais vous pouvez spécifier une position de début négative.
Syntaxe
SUBSTRING(character_string FROM start_position [ FOR number_characters ] )
SUBSTRING(character_string, start_position, number_characters )
SUBSTRING(binary_expression, start_byte, number_bytes )
SUBSTRING(binary_expression, start_byte )
Arguments
- character_string
-
Chaîne à rechercher. Les types de données non-caractères sont traités comme une chaîne.
- start_position
-
Position au sein de la chaîne à laquelle commencer l’extraction, à partir de 1. La position de début start_position est basée sur le nombre de caractères, pas d’octets, de sorte que les caractères à plusieurs octets soient comptés comme des caractères seuls. Ce numéro peut être négatif.
- number_characters
-
Nombre de caractères à extraire (longueur de la sous-chaîne). Le nombre de caractères number_characters est basé sur le nombre de caractères, pas d’octets, de sorte que les caractères à plusieurs octets soient comptés comme des caractères seuls. Ce numéro ne peut pas être négatif.
- binary_expression
-
Expression binaire du type de données VARBYTE à rechercher.
- start_byte
-
Position au sein de l’expression binaire à laquelle commencer l’extraction, à partir de 1. Ce numéro peut être négatif.
- number_bytes
-
Nombre d’octets à extraire, c’est-à-dire la longueur de la sous-chaîne. Ce numéro ne peut pas être négatif.
Type de retour
VARCHARou VARBYTE en fonction de l'entrée.
Notes d’utilisation
Vous trouverez ci-dessous quelques exemples de la façon dont vous pouvez utiliser start_position et number_characters pour extraire des sous-chaînes à partir de différentes positions d’une chaîne.
L’exemple suivant renvoie une chaîne de quatre caractères commençant par le sixième caractère.
select substring('caterpillar',6,4); substring ----------- pill (1 row)
Si la valeur start_position + number_characters dépasse la longueur de la chaîne, SUBSTRING renvoie une sous-chaîne commençant par la position de départ jusqu'à la fin de la chaîne. Par exemple :
select substring('caterpillar',6,8); substring ----------- pillar (1 row)
Si la valeur start_position
est négative ou égale à 0, la SUBSTRING fonction renvoie une sous-chaîne commençant au premier caractère de la chaîne avec une longueur de start_position
+ number_characters
-1. Par exemple :
select substring('caterpillar',-2,6); substring ----------- cat (1 row)
Si start_position
+ number_characters
-1 est inférieur ou égal à zéro, SUBSTRING renvoie une chaîne vide. Par exemple :
select substring('caterpillar',-5,4); substring ----------- (1 row)
Exemples
L'exemple suivant renvoie le mois à partir de la LISTTIME chaîne du LISTING tableau :
select listid, listtime, substring(listtime, 6, 2) as month from listing order by 1, 2, 3 limit 10; listid | listtime | month --------+---------------------+------- 1 | 2008-01-24 06:43:29 | 01 2 | 2008-03-05 12:25:29 | 03 3 | 2008-11-01 07:35:33 | 11 4 | 2008-05-24 01:18:37 | 05 5 | 2008-05-17 02:29:11 | 05 6 | 2008-08-15 02:08:13 | 08 7 | 2008-11-15 09:38:15 | 11 8 | 2008-11-09 05:07:30 | 11 9 | 2008-09-09 08:03:36 | 09 10 | 2008-06-17 09:44:54 | 06 (10 rows)
L'exemple suivant est le même que ci-dessus, mais utilise leFROM... FORoption :
select listid, listtime, substring(listtime from 6 for 2) as month from listing order by 1, 2, 3 limit 10; listid | listtime | month --------+---------------------+------- 1 | 2008-01-24 06:43:29 | 01 2 | 2008-03-05 12:25:29 | 03 3 | 2008-11-01 07:35:33 | 11 4 | 2008-05-24 01:18:37 | 05 5 | 2008-05-17 02:29:11 | 05 6 | 2008-08-15 02:08:13 | 08 7 | 2008-11-15 09:38:15 | 11 8 | 2008-11-09 05:07:30 | 11 9 | 2008-09-09 08:03:36 | 09 10 | 2008-06-17 09:44:54 | 06 (10 rows)
Vous ne pouvez pas l'utiliser SUBSTRING pour extraire de manière prévisible le préfixe d'une chaîne susceptible de contenir des caractères multi-octets, car vous devez spécifier la longueur d'une chaîne multi-octets en fonction du nombre d'octets, et non du nombre de caractères. Pour extraire le premier segment d'une chaîne en fonction de sa longueur en octets, vous pouvez utiliser CAST la chaîne sous la forme VARCHAR (byte_length) pour tronquer la chaîne, où byte_length est la longueur requise. L’exemple suivant extrait les 5 premiers octets de la chaîne 'Fourscore and
seven'
.
select cast('Fourscore and seven' as varchar(5)); varchar ------- Fours
L’exemple suivant illustre une position de départ négative d’une valeur binaire abc
. Comme la position de départ est -3, la sous-chaîne est extraite du début de la valeur binaire. Le résultat est automatiquement affiché sous forme de représentation hexadécimale de la sous-chaîne binaire.
select substring('abc'::varbyte, -3); substring ----------- 616263
L’exemple suivant montre un 1 pour la position de départ d’une valeur binaire abc
. Comme aucune longueur n’est spécifiée, la chaîne est extraite de la position de départ jusqu’à la fin de la chaîne. Le résultat est automatiquement affiché sous forme de représentation hexadécimale de la sous-chaîne binaire.
select substring('abc'::varbyte, 1); substring ----------- 616263
L’exemple suivant montre un 3 pour la position de départ d’une valeur binaire abc
. Comme aucune longueur n’est spécifiée, la chaîne est extraite de la position de départ jusqu’à la fin de la chaîne. Le résultat est automatiquement affiché sous forme de représentation hexadécimale de la sous-chaîne binaire.
select substring('abc'::varbyte, 3); substring ----------- 63
L’exemple suivant montre un 2 pour la position de départ d’une valeur binaire abc
. La chaîne est extraite de la position de départ à la position 10, mais la fin de la chaîne est à la position 3. Le résultat est automatiquement affiché sous forme de représentation hexadécimale de la sous-chaîne binaire.
select substring('abc'::varbyte, 2, 10); substring ----------- 6263
L’exemple suivant montre un 2 pour la position de départ d’une valeur binaire abc
. La chaîne est extraite de la position de départ pour 1 octet. Le résultat est automatiquement affiché sous forme de représentation hexadécimale de la sous-chaîne binaire.
select substring('abc'::varbyte, 2, 1); substring ----------- 62
L’exemple suivant renvoie le prénom Ana
qui apparaît après le dernier espace de la chaîne d’entrée Silva, Ana
.
select reverse(substring(reverse('Silva, Ana'), 1, position(' ' IN reverse('Silva, Ana'))))
reverse ----------- Ana