Catégories :

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

SPLIT

Fractionne une chaîne donnée avec un séparateur donné et renvoie le résultat sous la forme d’un tableau de chaînes.

Des chaînes fractionnées contiguës dans la chaîne source ou la présence d’une chaîne fractionnée au début ou à la fin de la chaîne source entraînent une chaîne vide dans la sortie. Une chaîne de séparateur vide produit un tableau contenant uniquement la chaîne source. Si l’un des paramètres est NULL, une valeur NULL est renvoyée.

Vous pouvez utiliser des fonctions et des constructions qui fonctionnent sur des tableaux sur le résultat, par exemple FLATTEN, ARRAY_SIZE et accès par position d’index.

Voir aussi ::

SPLIT_PART

Syntaxe

SPLIT(<string>, <separator>)
Copy

Arguments

string

Texte à scinder en plusieurs parties.

separator

Texte servant à scinder la chaîne.

Renvoie

Le type de données de la valeur renvoyée est ARRAY.

Détails du classement

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

  • pi (insensible à la ponctuation).

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

Les valeurs du tableau de sortie n’incluent pas de spécification de classement et ne prennent donc pas en charge d’autres opérations de classement.

Exemples

Divisez l’adresse IP localhost 127.0.0.1 en un tableau composé de chacune des quatre parties :

SELECT SPLIT('127.0.0.1', '.');
Copy
+-------------------------+
| SPLIT('127.0.0.1', '.') |
|-------------------------|
| [                       |
|   "127",                |
|   "0",                  |
|   "0",                  |
|   "1"                   |
| ]                       |
+-------------------------+

Accédez au premier élément du tableau renvoyé par la position d’index :

SELECT SPLIT('127.0.0.1', '.')[0];
Copy
+----------------------------+
| SPLIT('127.0.0.1', '.')[0] |
|----------------------------|
| "127"                      |
+----------------------------+

Fractionnez une chaîne contenant des lignes verticales en tant que séparateurs, ce qui renvoie une sortie contenant des chaînes vides :

SELECT SPLIT('|a||', '|');
Copy
+--------------------+
| SPLIT('|A||', '|') |
|--------------------|
| [                  |
|   "",              |
|   "a",             |
|   "",              |
|   ""               |
| ]                  |
+--------------------+

Utilisez le résultat de SPLIT pour générer plusieurs enregistrements à partir d’une seule chaîne à l’aide de la construction LATERAL FLATTEN. FLATTEN est une fonction de table qui utilise une colonne VARIANT, OBJECT ou ARRAY et génère une vue latérale (c’est-à-dire une vue en ligne contenant une corrélation faisant référence à d’autres tables qui la précèdent dans la clause FROM) :

CREATE TABLE split_test_names(first_name VARCHAR, children VARCHAR);

INSERT INTO split_test_names values
  ('Mark', 'Marky,Mike,Maria'),
  ('John', 'Johnny,Jane');

SELECT * FROM split_test_names;
Copy
+------------+------------------+
| FIRST_NAME | CHILDREN         |
|------------+------------------|
| Mark       | Marky,Mike,Maria |
| John       | Johnny,Jane      |
+------------+------------------+
SELECT first_name, C.value::STRING AS childname
  FROM split_test_names,
    LATERAL FLATTEN(INPUT=>SPLIT(children, ',')) C;
Copy
+------------+-----------+
| FIRST_NAME | CHILDNAME |
|------------+-----------|
| Mark       | Marky     |
| Mark       | Mike      |
| Mark       | Maria     |
| John       | Johnny    |
| John       | Jane      |
+------------+-----------+