Kategorien:

Zeichenfolgen- und Binärfunktionen (Allgemein), Tabellenfunktionen

SPLIT_TO_TABLE

Diese Tabellenfunktion teilt eine Zeichenfolge (basierend auf einem angegebenen Trennzeichen) und vereinfacht die Ergebnisse in Zeilen.

Siehe auch:

SPLIT

Syntax

SPLIT_TO_TABLE(<string>, <delimiter>)
Copy

Argumente

string

Aufzuteilender Text.

delimiter

Text, anhand dessen die Zeichenfolge aufgeteilt werden soll.

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(SPLIT_TO_TABLE('a.b', '.')) AS table1
  ORDER BY table1.value;
Copy
+-------+
| VALUE |
|-------|
| a     |
| b     |
+-------+

Erstellen Sie eine Tabelle, und fügen Sie Daten ein:

CREATE OR REPLACE TABLE splittable (v VARCHAR);
INSERT INTO splittable (v) VALUES ('a.b.c'), ('d'), ('');
SELECT * FROM splittable;
Copy
+-------+
| V     |
|-------|
| a.b.c |
| d     |
|       |
+-------+

Sie können das Schlüsselwort LATERAL mit der Funktion SPLIT_TO_TABLE verwenden, sodass die Funktion auf jeder Zeile der Tabelle splittable als korrelierte Tabelle ausgeführt wird:

SELECT *
  FROM splittable, LATERAL SPLIT_TO_TABLE(splittable.v, '.')
  ORDER BY SEQ, INDEX;
Copy
+-------+-----+-------+-------+
| 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 |       |
+-------+-----+-------+-------+

Erstellen Sie eine weitere Tabelle, die Autoren in einer Spalte und einige ihrer Buchtitel in einer anderen Spalte enthält, getrennt durch Kommas:

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;
Copy
+---------------------+---------------------------------------------------------------------------+
| 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_test, LATERAL SPLIT_TO_TABLE(titles, ',')
  ORDER BY author;
Copy
+---------------------+-------------------------------+
| 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        |
+---------------------+-------------------------------+