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

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 la string 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                       |
+-------------------------+
Copy

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                                  |
+---------------------------------------+
Copy
SELECT STRTOK('user@snowflake.com', '@.', 2);
+---------------------------------------+
| STRTOK('USER@SNOWFLAKE.COM', '@.', 2) |
|---------------------------------------|
| snowflake                             |
+---------------------------------------+
Copy
SELECT STRTOK('user@snowflake.com', '@.', 3);
+---------------------------------------+
| STRTOK('USER@SNOWFLAKE.COM', '@.', 3) |
|---------------------------------------|
| com                                   |
+---------------------------------------+
Copy

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

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

Voici un exemple avec une chaîne de délimiteur vide :

select strtok('a.b', '', 1);
+----------------------+
| STRTOK('A.B', '', 1) |
|----------------------|
| a.b                  |
+----------------------+
Copy

Voici des exemples avec des valeurs NULL pour chacun des paramètres :

select strtok(NULL, '.', 1);
+----------------------+
| STRTOK(NULL, '.', 1) |
|----------------------|
| NULL                 |
+----------------------+
Copy
select strtok('a.b', NULL, 1);
+------------------------+
| STRTOK('A.B', NULL, 1) |
|------------------------|
| NULL                   |
+------------------------+
Copy
select strtok('a.b', '.', NULL);
+--------------------------+
| STRTOK('A.B', '.', NULL) |
|--------------------------|
| NULL                     |
+--------------------------+
Copy