Catégories :

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

SPLIT_PART

Fractionne une chaîne donnée et renvoie la partie demandée.

Si un paramètre est NULL, NULL est renvoyé.

Astuce

Vous pouvez utiliser le service d’optimisation de recherche pour améliorer les performances des requêtes qui appellent cette fonction. Pour plus de détails, voir Service d’optimisation de la recherche.

Voir aussi ::

SPLIT

Syntaxe

SPLIT_PART(<string>, <delimiter>, <partNumber>)
Copy

Arguments

string

Texte à scinder en plusieurs parties.

delimiter

Texte représentant le délimiteur à scinder.

partNumber

Partie de la scission demandée (base 1).

Si la valeur est négative, les parties sont comptées à l’envers à partir de la fin de la chaîne.

Notes sur l’utilisation

  • Si le partNumber est hors limites, la valeur renvoyée est une chaîne vide.

  • 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 faisant partie du résultat de la division. (Pour un exemple, voir la section Exemples ci-dessous.)

  • Si le partNumber est 0, il est traité comme 1. En d’autres termes, il obtient le premier élément de la scission. Pour éviter toute confusion quant à savoir si les index sont basés sur 1 ou sur 0, Snowflake recommande d’éviter l’utilisation de 0 comme synonyme de 1.

  • Si le séparateur est une chaîne vide, après la scission, la valeur renvoyée est la chaîne d’entrée (la chaîne n’est pas fractionnée).

Détails du classement

The collation specifications of all input arguments must be compatible.

Cette fonction ne fonctionne pas avec les spécifications de classement suivantes :

  • pi (insensible à la ponctuation).

  • cs-ai (sensible à la casse, insensible aux accents)

Note

Pour utiliser cette fonction avec une colonne qui a les spécificateurs de classement upper ou lower, vous devez activer le bundle de changements de comportement 2024_02 dans votre compte.

Pour activer ce bundle dans votre compte, exécutez l’instruction suivante :

SELECT SYSTEM$ENABLE_BEHAVIOR_CHANGE_BUNDLE('2024_02');
Copy

Exemples

Montrez les portions renvoyées par différentes valeurs partNumber.

select  0, split_part('11.22.33', '.',  0) UNION
select  1, split_part('11.22.33', '.',  1) UNION
select  2, split_part('11.22.33', '.',  2) UNION
select  3, split_part('11.22.33', '.',  3) UNION
select  4, split_part('11.22.33', '.',  4) UNION
select -1, split_part('11.22.33', '.', -1) UNION
select -2, split_part('11.22.33', '.', -2) UNION
select -3, split_part('11.22.33', '.', -3) UNION
select -4, split_part('11.22.33', '.', -4)
;
+----+---------------------------------+
|  0 | SPLIT_PART('11.22.33', '.',  0) |
|----+---------------------------------|
|  0 | 11                              |
|  1 | 11                              |
|  2 | 22                              |
|  3 | 33                              |
|  4 |                                 |
| -1 | 33                              |
| -2 | 22                              |
| -3 | 11                              |
| -4 |                                 |
+----+---------------------------------+
Copy

Renvoie la première et la dernière parties de l’adresse IP de localhost 127.0.0.1 :

SELECT SPLIT_PART('127.0.0.1', '.', 1), SPLIT_PART('127.0.0.1', '.', -1);
+---------------------------------+----------------------------------+
| SPLIT_PART('127.0.0.1', '.', 1) | SPLIT_PART('127.0.0.1', '.', -1) |
|---------------------------------+----------------------------------|
| 127                             | 1                                |
+---------------------------------+----------------------------------+
Copy

Renvoie les première et deuxième parties d’une chaîne de caractères séparés par des barres verticales. Notez que le séparateur est la première partie de la chaîne d’entrée et que le premier élément après le fractionnement est donc une chaîne vide.

SELECT SPLIT_PART('|a|b|c|', '|', 1), SPLIT_PART('|a|b|c|', '|', 2);
+-------------------------------+-------------------------------+
| SPLIT_PART('|A|B|C|', '|', 1) | SPLIT_PART('|A|B|C|', '|', 2) |
|-------------------------------+-------------------------------|
|                               | a                             |
+-------------------------------+-------------------------------+
Copy

L’exemple suivant montre un séparateur à plusieurs caractères :

SELECT SPLIT_PART('aaa--bbb-BBB--ccc', '--', 2);
+------------------------------------------+
| SPLIT_PART('AAA--BBB-BBB--CCC', '--', 2) |
|------------------------------------------|
| bbb-BBB                                  |
+------------------------------------------+
Copy

L’exemple suivant montre que si le séparateur est une chaîne vide, alors après le fractionnement, il n’y a toujours qu’une seule chaîne :

select  1, split_part('user@snowflake.com', '',  1) UNION
select -1, split_part('user@snowflake.com', '', -1) UNION
select  2, split_part('user@snowflake.com', '',  2) UNION
select -2, split_part('user@snowflake.com', '', -2);
+----+------------------------------------------+
|  1 | SPLIT_PART('USER@SNOWFLAKE.COM', '',  1) |
|----+------------------------------------------|
|  1 | user@snowflake.com                       |
| -1 | user@snowflake.com                       |
|  2 |                                          |
| -2 |                                          |
+----+------------------------------------------+
Copy