- Kategorien:
Zeichenfolgen- und Binärfunktionen (Allgemein), Tabellenfunktionen
STRTOK_SPLIT_TO_TABLE¶
Übersetzt eine Zeichenfolge mit den angegebenen Trennzeichen in Token und vereinfacht die Ergebnisse in Zeilen.
- Siehe auch:
Syntax¶
STRTOK_SPLIT_TO_TABLE(<string> [,<delimiter_list>])
Argumente¶
Benötigt:
string
Text, der in Token übersetzt werden soll.
Optional:
delimiter_list
Optionale Gruppe von Trennzeichen. Der Standardwert ist ein einzelnes Leerzeichen.
Ausgabe¶
Diese Funktion gibt die folgenden Spalten zurück:
Spaltenname |
Datentyp |
Beschreibung |
---|---|---|
SEQ |
NUMBER |
Eine eindeutige Sequenznummer, die dem Eingabedatensatz zugeordnet ist. Es ist nicht garantiert, dass die Sequenz lückenlos ist oder auf eine bestimmte Weise angeordnet wird. |
INDEX |
NUMBER |
Der einsbasierte Index des Elements |
VALUE |
VARCHAR |
Der Wert des Elements des vereinfachten Arrays. |
Bemerkung
Die Abfrage kann auch auf die Spalten der ursprünglichen (korrelierten) Tabelle zugreifen, die als Datenquelle für diese Funktion diente. Wenn eine einzelne Zeile der ursprünglichen Tabelle in der vereinfachten Ansicht zu mehreren Zeilen führt, werden die Werte in dieser Eingabezeile entsprechend der Zahl der von dieser Funktion erzeugten Zeilen repliziert.
Beispiele¶
Hier ist ein einfaches Beispiel für eine konstante Eingabe:
SELECT table1.value
FROM TABLE(STRTOK_SPLIT_TO_TABLE('a.b', '.')) AS table1
ORDER BY table1.value;
+-------+
| VALUE |
|-------|
| a |
| b |
+-------+
Erstellen Sie eine Tabelle, und fügen Sie Daten ein:
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 |
| |
+-----+
Sie können das Schlüsselwort LATERAL mit der Funktion STRTOK_SPLIT_TO_TABLE verwenden, sodass die Funktion auf jeder Zeile der Tabelle splittable_strtok
als korrelierte Tabelle ausgeführt wird:
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 |
+-----+-----+-------+-------+
Dieses Beispiel ist dasselbe wie das vorherige, außer dass mehrere Trennzeichen angegeben sind:
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 |
+-----+-----+-------+-------+
Erstellen Sie eine weitere Tabelle, die Autoren in einer Spalte und einige ihrer Buchtitel in einer anderen Spalte enthält. In den Tabellendaten können die Buchtitel durch ein Komma oder ein Semikolon getrennt sein:
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 |
+---------------------+---------------------------------------------------------------------------+
Verwenden Sie das Schlüsselwort LATERAL und die Funktion SPLIT_TO_TABLE, um eine Abfrage zu starten, die für jeden Titel eine eigene Zeile zurückgibt. Verwenden Sie außerdem die Funktion TRIM, um führende und nachstehende Leerzeichen aus den Titeln zu entfernen. Beachten Sie, dass die SELECT-Liste die feste Spalte value
enthält, die von der Funktion zurückgegeben wird:
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 |
+---------------------+-------------------------------+