- Catégories :
Fonctions de chaîne et fonctions binaires (général) , Fonctions de table
STRTOK_SPLIT_TO_TABLE¶
Tokenize une chaîne avec le jeu de délimiteurs donné et aplatit les résultats en lignes.
- Voir aussi :
Syntaxe¶
STRTOK_SPLIT_TO_TABLE(<string> [,<delimiter_list>])
Arguments¶
Obligatoire :
string
Texte à tokeniser.
Facultatif :
delimiter_list
Ensemble facultatif de délimiteurs. La valeur par défaut est un caractère d’espacement unique.
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(STRTOK_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_strtok (v VARCHAR);
INSERT INTO splittable_strtok (v) VALUES ('a b'), ('cde'), ('f|g'), ('');
SELECT * FROM splittable_strtok;
+-----+
| V |
|-----|
| a b |
| cde |
| f|g |
| |
+-----+
Vous pouvez utiliser le LATERAL mot-clé avec la fonction STRTOK_SPLIT_TO_TABLE afin que la fonction s’exécute sur chaque ligne de la table splittable_strtok
comme une table corrélée :
SELECT *
FROM splittable_strtok, LATERAL STRTOK_SPLIT_TO_TABLE(splittable_strtok.v, ' ')
ORDER BY SEQ, INDEX;
+-----+-----+-------+-------+
| V | SEQ | INDEX | VALUE |
|-----+-----+-------+-------|
| a b | 1 | 1 | a |
| a b | 1 | 2 | b |
| cde | 2 | 1 | cde |
| f|g | 3 | 1 | f|g |
+-----+-----+-------+-------+
Cet exemple est identique au précédent, à la différence près qu’il spécifie plusieurs délimiteurs :
SELECT *
FROM splittable_strtok, LATERAL STRTOK_SPLIT_TO_TABLE(splittable_strtok.v, ' |')
ORDER BY SEQ, INDEX;
+-----+-----+-------+-------+
| V | SEQ | INDEX | VALUE |
|-----+-----+-------+-------|
| a b | 1 | 1 | a |
| a b | 1 | 2 | b |
| cde | 2 | 1 | cde |
| f|g | 3 | 1 | f |
| f|g | 3 | 2 | g |
+-----+-----+-------+-------+
Créez une autre table contenant les auteurs dans une colonne et certains de leurs titres de livres dans une autre colonne. Dans les données de la table, les titres des livres peuvent être séparés par une virgule ou un point-virgule :
CREATE OR REPLACE TABLE authors_books_test2 (author VARCHAR, titles VARCHAR);
INSERT INTO authors_books_test2 (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_test2;
+---------------------+---------------------------------------------------------------------------+
| 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_test2, LATERAL STRTOK_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 |
+---------------------+-------------------------------+