如何在 PostgreSQL 中将一列拆分为多行?
Jan 06, 2025 pm 09:54 PM在 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;
登录后复制
附加说明
- WHERE子句用于根据标志值过滤结果。
- FROM 列表中的逗号表示 CROSS JOIN,对于 FROM 中的集合返回函数会自动假定它列表。
- 如果主题列可以为空或 null,请使用 LEFT JOIN 和 ON TRUE 来保留原始表中的合格行。
以上是如何在 PostgreSQL 中将一列拆分为多行?的详细内容。更多信息请关注PHP中文网其他相关文章!
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热门文章
两个点博物馆:邦格荒地地点指南
4 周前
By 尊渡假赌尊渡假赌尊渡假赌
击败分裂小说需要多长时间?
3 周前
By DDD
仓库:如何复兴队友
3 周前
By 尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island冒险:如何获得巨型种子
3 周前
By 尊渡假赌尊渡假赌尊渡假赌
公众号网页更新缓存难题:如何避免版本更新后旧缓存影响用户体验?
3 周前
By 王林

热门文章
两个点博物馆:邦格荒地地点指南
4 周前
By 尊渡假赌尊渡假赌尊渡假赌
击败分裂小说需要多长时间?
3 周前
By DDD
仓库:如何复兴队友
3 周前
By 尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island冒险:如何获得巨型种子
3 周前
By 尊渡假赌尊渡假赌尊渡假赌
公众号网页更新缓存难题:如何避免版本更新后旧缓存影响用户体验?
3 周前
By 王林

热门文章标签

记事本++7.3.1
好用且免费的代码编辑器

SublimeText3汉化版
中文版,非常好用

禅工作室 13.0.1
功能强大的PHP集成开发环境

Dreamweaver CS6
视觉化网页开发工具

SublimeText3 Mac版
神级代码编辑软件(SublimeText3)

在 Linux 中运行 MySQl(有/没有带有 phpmyadmin 的 podman 容器)
