- Catégories :
STRTOK¶
Tokenize une chaîne donnée et renvoie la partie demandée.
- Voir aussi :
Syntaxe¶
STRTOK(<string> [,<delimiter>] [,<partNumber>])
Arguments¶
Obligatoire :
stringTexte à tokeniser.
Facultatif :
delimiterTexte représentant l’ensemble des délimiteurs sur lesquels tokeniser. Chaque caractère de la chaîne du délimiteur est un délimiteur distinct. Par exemple, si le délimiteur est
'@.', alors'@'et'.'sont tous deux traités comme des délimiteurs. Ce comportement diffère de SPLIT_PART, qui traite le délimiteur entier comme une seule chaîne de délimiteur.Si le délimiteur est vide et que la
stringest vide, alors la fonction retourne NULL. Si le délimiteur est vide et que lastringn’est pas vide, la chaîne entière sera traitée comme un seul jeton.Par défaut : Un caractère d’espacement unique
partNumberJeton demandé, qui est basé sur 1, de sorte 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é.
Par défaut : 1
Renvoie¶
Le type de données de la valeur renvoyée est VARCHAR.
Si la partie demandée n’existe pas ou si un argument est NULL, alors NULL est renvoyé.
Notes sur l’utilisation¶
Semblable à Linux strtok(), STRTOK ne renvoie jamais une chaîne vide sous forme de jeton. Ce comportement diffère de SPLIT_PART, qui peut renvoyer des chaînes vides en tant que parties lorsque la chaîne d’entrée commence ou se termine par le délimiteur, ou lorsqu’il existe des délimiteurs consécutifs.
Exemples¶
Les exemples suivants appellent la fonction STRTOK :
Renvoyer le premier jeton d’une chaîne¶
L’exemple simple suivant appelle STRTOK pour renvoyer le premier jeton d’une chaîne :
SELECT STRTOK('a.b.c', '.', 1);
+-------------------------+
| STRTOK('A.B.C', '.', 1) |
|-------------------------|
| a |
+-------------------------+
Utiliser plusieurs délimiteurs pour renvoyer différents jetons¶
L’exemple suivant 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 |
+---------------------------------------+
Démontrer l’indexation au-delà du dernier jeton possible dans la chaîne¶
L’exemple suivant montre ce qui se passe lorsque vous indexez au-delà du dernier jeton possible dans la chaîne :
SELECT STRTOK('user@snowflake.com.', '@.', 4);
+----------------------------------------+
| STRTOK('USER@SNOWFLAKE.COM.', '@.', 4) |
|----------------------------------------|
| NULL |
+----------------------------------------+
Montrer comment le premier élément peut être au-delà de la fin de la chaîne¶
Dans cet exemple, la chaîne d’entrée est vide et il n’existe pas d’éléments. Ainsi, le premier élément est au-delà de la fin de la chaîne, et la fonction renvoie NULL au lieu d’une chaîne vide :
SELECT STRTOK('', '', 1);
+-------------------+
| STRTOK('', '', 1) |
|-------------------|
| NULL |
+-------------------+
Appeler STRTOK avec un délimiteur vide¶
Voici un exemple avec une chaîne de délimiteur vide :
SELECT STRTOK('a.b', '', 1);
+----------------------+
| STRTOK('A.B', '', 1) |
|----------------------|
| a.b |
+----------------------+
Démontrer les valeurs NULL pour les arguments¶
Les exemples suivants spécifient les valeurs NULL pour chacun des arguments :
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 |
+--------------------------+
Démontrer les différences entre STRTOK et SPLIT_PART¶
Cet exemple montre la différence entre STRTOK etSPLIT_PART lorsque vous utilisez des délimiteurs répétés. STRTOK traite chaque caractère de la chaîne du délimiteur:code:'|-' comme délimiteur distinct, en la divisant à chaque caractère '|' et '-'. En revanche, SPLIT_PART traite toute la chaîne du délimiteur '|-' en tant que délimiteur unique, de sorte qu’il ne se fractionne que là où cette séquence exacte apparaît :
SELECT STRTOK('data1||data2|-data3---data4', '|-', 1) AS strtok_1,
STRTOK('data1||data2|-data3---data4', '|-', 2) AS strtok_2,
STRTOK('data1||data2|-data3---data4', '|-', 3) AS strtok_3,
STRTOK('data1||data2|-data3---data4', '|-', 4) AS strtok_4,
SPLIT_PART('data1||data2|-data3---data4', '|-', 1) AS split_part_1,
SPLIT_PART('data1||data2|-data3---data4', '|-', 2) AS split_part_2,
SPLIT_PART('data1||data2|-data3---data4', '|-', 3) AS split_part_3;
+----------+----------+----------+----------+-----------------+--------------+--------------+
| STRTOK_1 | STRTOK_2 | STRTOK_3 | STRTOK_4 | SPLIT_PART_1 | SPLIT_PART_2 | SPLIT_PART_3 |
|----------+----------+----------+----------+-----------------+--------------+--------------|
| data1 | data2 | data3 | data4 | data1||data2 | data3---data4| |
+----------+----------+----------+----------+-----------------+--------------+--------------+