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.

Pour renvoyer tous les caractères après un caractère spécifié, vous pouvez utiliser les fonctions POSITION et SUBSTR. Pour un exemple, voir Renvoyer des sous-chaînes pour les chaînes d’e-mail, de téléphone et de date.

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.

Renvoie

La fonction renvoie une valeur de type VARCHAR.

Si un argument est NULL, NULL est retourné.

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)

Exemples

Cet exemple montre les portions renvoyées par différentes valeurs partNumber.

SELECT column1 part_number_value, column2 portion
  FROM VALUES
    (0, SPLIT_PART('11.22.33', '.',  0)),
    (1, SPLIT_PART('11.22.33', '.',  1)),
    (2, SPLIT_PART('11.22.33', '.',  2)),
    (3, SPLIT_PART('11.22.33', '.',  3)),
    (4, SPLIT_PART('11.22.33', '.',  4)),
    (-1, SPLIT_PART('11.22.33', '.',  -1)),
    (-2, SPLIT_PART('11.22.33', '.',  -2)),
    (-3, SPLIT_PART('11.22.33', '.',  -3)),
    (-4, SPLIT_PART('11.22.33', '.',  -4));
Copy
+-------------------+---------+
| PART_NUMBER_VALUE | PORTION |
|-------------------+---------|
|                 0 | 11      |
|                 1 | 11      |
|                 2 | 22      |
|                 3 | 33      |
|                 4 |         |
|                -1 | 33      |
|                -2 | 22      |
|                -3 | 11      |
|                -4 |         |
+-------------------+---------+

Renvoie la première et la dernière parties de l’adresse IP de l’hôte local 127.0.0.1 :

SELECT SPLIT_PART('127.0.0.1', '.', 1) AS first_part,
       SPLIT_PART('127.0.0.1', '.', -1) AS last_part;
Copy
+------------+-----------+
| FIRST_PART | LAST_PART |
|------------+-----------|
| 127        | 1         |
+------------+-----------+

Cet exemple renvoie les première et deuxième parties d’une chaîne de caractères séparés par des barres verticales. 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) AS first_part,
       SPLIT_PART('|a|b|c|', '|', 2) AS last_part;
Copy
+------------+-----------+
| FIRST_PART | LAST_PART |
|------------+-----------|
|            | a         |
+------------+-----------+

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

SELECT SPLIT_PART('aaa--bbb-BBB--ccc', '--', 2) AS multi_character_separator;
Copy
+---------------------------+
| MULTI_CHARACTER_SEPARATOR |
|---------------------------|
| bbb-BBB                   |
+---------------------------+

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 column1 part_number_value, column2 portion
  FROM VALUES
    (1, split_part('user@snowflake.com', '',  1)),
    (-1, split_part('user@snowflake.com', '', -1)),
    (2, split_part('user@snowflake.com', '',  2)),
    (-2, split_part('user@snowflake.com', '', -2));
Copy
+-------------------+--------------------+
| PART_NUMBER_VALUE | PORTION            |
|-------------------+--------------------|
|                 1 | user@snowflake.com |
|                -1 | user@snowflake.com |
|                 2 |                    |
|                -2 |                    |
+-------------------+--------------------+