- Catégories :
STRTOK¶
Tokenize une chaîne donnée et renvoie la partie demandée.
Si la partie demandée n’existe pas, alors NULL est renvoyé. Si un paramètre est NULL, NULL est renvoyé.
- Voir aussi :
Syntaxe¶
STRTOK(<string> [,<delimiter>] [,<partNr>])
Arguments¶
Obligatoire :
string
Texte à tokeniser.
Facultatif :
delimiter
Texte représentant l’ensemble des délimiteurs sur lesquels tokeniser. Chaque caractère de la chaîne du délimiteur est un délimiteur. Si le délimiteur est vide et que la
string
est vide, la fonction renvoie NULL. Si le délimiteur est vide et que lastring
n’est pas vide, la chaîne entière sera traitée comme un seul jeton. La valeur par défaut du délimiteur est un caractère d’espacement unique.partNr
Jeton demandé, qui est basé sur 1 (c’est-à-dire que le premier jeton est le jeton numéro 1 et non le jeton numéro 0). Si le numéro du jeton est hors limites, alors NULL est renvoyé. La valeur par défaut est 1.
Renvoie¶
Le type de données de la valeur renvoyée est VARCHAR.
Notes sur l’utilisation¶
Si la chaîne commence ou se termine par le délimiteur, le système considère respectivement les espaces vides avant ou après le délimiteur comme un jeton valide.
Semblable à Linux strtok(), STRTOK ne renvoie jamais une chaîne vide sous forme de jeton.
Exemples¶
Voici un exemple simple d’utilisation de STRTOK
:
SELECT STRTOK('a.b.c', '.', 1); +-------------------------+ | STRTOK('A.B.C', '.', 1) | |-------------------------| | a | +-------------------------+
Cet exemple montre comment utiliser plusieurs délimiteurs pour renvoyer les premier, deuxième et troisième jetons lorsque les délimiteurs sont “@” et “.”.
SELECT STRTOK('user@snowflake.com', '@.', 1); +---------------------------------------+ | STRTOK('USER@SNOWFLAKE.COM', '@.', 1) | |---------------------------------------| | user | +---------------------------------------+SELECT STRTOK('user@snowflake.com', '@.', 2); +---------------------------------------+ | STRTOK('USER@SNOWFLAKE.COM', '@.', 2) | |---------------------------------------| | snowflake | +---------------------------------------+SELECT STRTOK('user@snowflake.com', '@.', 3); +---------------------------------------+ | STRTOK('USER@SNOWFLAKE.COM', '@.', 3) | |---------------------------------------| | com | +---------------------------------------+
Cela montre ce qui se passe si vous essayez d’indexer au-delà du dernier jeton possible dans la chaîne :
select strtok('user@snowflake.com.', '@.', 4); +----------------------------------------+ | STRTOK('USER@SNOWFLAKE.COM.', '@.', 4) | |----------------------------------------| | NULL | +----------------------------------------+Dans cet exemple, puisque la chaîne d’entrée est vide, il existe 0 élément. Par conséquent, l’élément #1 dépasse la fin de la chaîne. La fonction renvoie alors NULL plutôt qu’une chaîne vide :
select strtok('', '', 1); +-------------------+ | STRTOK('', '', 1) | |-------------------| | NULL | +-------------------+
Voici un exemple avec une chaîne de délimiteur vide :
select strtok('a.b', '', 1); +----------------------+ | STRTOK('A.B', '', 1) | |----------------------| | a.b | +----------------------+
Voici des exemples avec des valeurs NULL pour chacun des paramètres :
select strtok(NULL, '.', 1); +----------------------+ | STRTOK(NULL, '.', 1) | |----------------------| | NULL | +----------------------+select strtok('a.b', NULL, 1); +------------------------+ | STRTOK('A.B', NULL, 1) | |------------------------| | NULL | +------------------------+select strtok('a.b', '.', NULL); +--------------------------+ | STRTOK('A.B', '.', NULL) | |--------------------------| | NULL | +--------------------------+