在 Postgres 中将列拆分为多行
假设您有一个表,其中一列包含多个值,例如:
subject | flag --------+----- this is a test | 2
您可能需要将此表转换为新结构,其中原始列中的每个值都成为单独的行,如下所示:
token | flag --------+----- this | 2 is | 2 a | 2 test | 2
使用 LATERAL Join 的解决方案 (Postgres 14 )
Postgres 14 及更高版本提供了一种使用 LATERAL join 实现此目的的有效方法string_to_table() 函数。此函数将主题列拆分为标记数组:
SELECT token, flag FROM tbl, string_to_table(subject, ' ') AS token WHERE flag = 2;
使用 string_to_array() 的解决方案(Postgres 13-)
对于 Postgres 13 或更早版本,请使用string_to_array() 函数而不是string_to_table():
SELECT unnest(string_to_array(subject, ' ')) AS token, flag FROM tbl WHERE flag = 2;
使用正则表达式的替代解决方案
另一种选择是使用 regexp_split_to_table() 函数,尽管它的效率低于 string_to_table()方法:
SELECT s.token, t.flag FROM tbl t CROSS JOIN regexp_split_to_table(subject, ' ') AS s(token) WHERE t.flag = 2;
附加说明
以上是如何在 PostgreSQL 中将一列拆分为多行?的详细内容。更多信息请关注PHP中文网其他相关文章!