Catégories :

Fonctions de chaîne et fonctions binaires (Général)

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 :

SPLIT_PART

Syntaxe

STRTOK(<string> [,<delimiter>] [,<partNr>])

Arguments

Obligatoire :

chaîne

Texte à tokeniser.

Facultatif :

délimiteur

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 chaîne est vide, la fonction renvoie NULL. Si le délimiteur est vide et que la chaîne 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.

numPart

Jeton demandé (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                     |
+--------------------------+