- Catégories :
Fonctions de chaîne et fonctions binaires (général) , Fonctions de table
SPLIT_TO_TABLE¶
Cette fonction de table divise une chaîne (en fonction d’un délimiteur spécifié) et aplatit les résultats en lignes.
- Voir aussi :
Syntaxe¶
SPLIT_TO_TABLE(<string>, <delimiter>)
Arguments¶
string
Texte à scinder.
delimiter
Texte par lequel diviser la chaîne.
Sortie¶
Cette fonction renvoie les colonnes suivantes :
Nom de la colonne |
Type de données |
Description |
---|---|---|
SEQ |
NUMBER |
Un numéro de séquence unique associé à l’enregistrement d’entrée. Il n’est pas garanti que la séquence ne présente pas d’écart ou qu’elle soit ordonnée d’une manière particulière. |
INDEX |
NUMBER |
L’index de base un de l’élément. |
VALUE |
VARCHAR |
Valeur de l’élément du tableau aplati. |
Note
La requête peut également accéder aux colonnes de la table d’origine (corrélée) ayant servi de source de données pour cette fonction. Si une seule ligne de la table d’origine a donné plusieurs lignes dans la vue aplatie, les valeurs de cette ligne d’entrée sont répliquées pour correspondre au nombre de lignes produites par cette fonction.
Exemples¶
Voici un exemple simple sur une entrée constante.
SELECT table1.value
FROM TABLE(SPLIT_TO_TABLE('a.b', '.')) AS table1
ORDER BY table1.value;
+-------+
| VALUE |
|-------|
| a |
| b |
+-------+
Créer une table et insérer des données :
CREATE OR REPLACE TABLE splittable (v VARCHAR);
INSERT INTO splittable (v) VALUES ('a.b.c'), ('d'), ('');
SELECT * FROM splittable;
+-------+
| V |
|-------|
| a.b.c |
| d |
| |
+-------+
Vous pouvez utiliser le LATERAL mot-clé avec la fonction SPLIT_TO_TABLE afin que la fonction s’exécute sur chaque ligne de la table splittable
comme une table corrélée :
SELECT *
FROM splittable, LATERAL SPLIT_TO_TABLE(splittable.v, '.')
ORDER BY SEQ, INDEX;
+-------+-----+-------+-------+
| V | SEQ | INDEX | VALUE |
|-------+-----+-------+-------|
| a.b.c | 1 | 1 | a |
| a.b.c | 1 | 2 | b |
| a.b.c | 1 | 3 | c |
| d | 2 | 1 | d |
| | 3 | 1 | |
+-------+-----+-------+-------+
Créez une autre table contenant les auteurs dans une colonne et certains de leurs titres de livres dans une autre colonne, séparés par des virgules :
CREATE OR REPLACE TABLE authors_books_test (author VARCHAR, titles VARCHAR);
INSERT INTO authors_books_test (author, titles) VALUES
('Nathaniel Hawthorne', 'The Scarlet Letter , The House of the Seven Gables,The Blithedale Romance'),
('Herman Melville', 'Moby Dick,The Confidence-Man');
SELECT * FROM authors_books_test;
+---------------------+---------------------------------------------------------------------------+
| AUTHOR | TITLES |
|---------------------+---------------------------------------------------------------------------|
| Nathaniel Hawthorne | The Scarlet Letter , The House of the Seven Gables,The Blithedale Romance |
| Herman Melville | Moby Dick,The Confidence-Man |
+---------------------+---------------------------------------------------------------------------+
Utilisez le mot-clé LATERAL et la fonction SPLIT_TO_TABLE pour exécuter une requête qui renvoie une ligne distincte pour chaque titre. De plus, utilisez la fonction TRIM pour supprimer les espaces de début et de fin des titres. Notez que la liste SELECT comprend la colonne fixe value
renvoyée par la fonction :
SELECT author, TRIM(value) AS title
FROM authors_books_test, LATERAL SPLIT_TO_TABLE(titles, ',')
ORDER BY author;
+---------------------+-------------------------------+
| AUTHOR | TITLE |
|---------------------+-------------------------------|
| Herman Melville | Moby Dick |
| Herman Melville | The Confidence-Man |
| Nathaniel Hawthorne | The Scarlet Letter |
| Nathaniel Hawthorne | The House of the Seven Gables |
| Nathaniel Hawthorne | The Blithedale Romance |
+---------------------+-------------------------------+