- 类别:
/sql-reference/functions-string`(通用)、:doc:/sql-reference/functions-table`
SPLIT_TO_TABLE¶
此表函数拆分字符串(基于指定的分隔符),并将结果展平为行。
- 另请参阅:
语法¶
SPLIT_TO_TABLE(<string>, <delimiter>)
实参¶
string
要拆分的文本。
delimiter
用于拆分字符串的文本。
输出¶
该函数返回以下列:
列名称 |
数据类型 |
描述 |
---|---|---|
SEQ |
NUMBER |
与输入记录相关的唯一序列号。不能保证序列没有间隙或以任何特定方式排序。 |
INDEX |
NUMBER |
基于 1 的元素索引。 |
VALUE |
VARCHAR |
扁平化数组的元素值。 |
备注
此查询还可以访问用作此函数数据源的原始(相关)表中的列。如果原始表中的一行导致展平视图中有多行,则复制该输入行中的值以匹配此函数生成的行数。
示例¶
以下是关于常量输入的简单示例。
SELECT table1.value
FROM TABLE(SPLIT_TO_TABLE('a.b', '.')) AS table1
ORDER BY table1.value;
+-------+
| VALUE |
|-------|
| a |
| b |
+-------+
创建表并插入数据:
CREATE OR REPLACE TABLE splittable (v VARCHAR);
INSERT INTO splittable (v) VALUES ('a.b.c'), ('d'), ('');
SELECT * FROM splittable;
+-------+
| V |
|-------|
| a.b.c |
| d |
| |
+-------+
您可以将 LATERAL 关键字与 SPLIT_TO_TABLE 函数一起使用,这样该函数就可以作为关联表在 splittable
表的每一行上执行:
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 | |
+-------+-----+-------+-------+
创建另一个表,在其中一列包含作者,在另一列包含他们的一些书名,用逗号分隔:
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 |
+---------------------+---------------------------------------------------------------------------+
结合使用 LATERAL 关键字和 SPLIT_TO_TABLE 函数来运行查询,该查询将为每个标题返回单独的行。此外,还可以使用 TRIM 函数来移除标题中的前导空格和尾随空格。请注意,SELECT 列表包括该函数返回的固定 value
列:
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 |
+---------------------+-------------------------------+