在 postgresql 查询中需要拆分行的帮助
Posted
技术标签:
【中文标题】在 postgresql 查询中需要拆分行的帮助【英文标题】:need help on split row in postgresql query 【发布时间】:2018-07-09 07:38:36 【问题描述】:我有一个下表,我需要按 role_collection 值拆分行:
name role_collection date
------------------------------------
raj 3,5 2018 6 12
gopi 2,3,6 2018 6 12
mani 3,4,5,7 2018 6 12
现在我需要这样的输出:
name role date
------------------------
raj 3 2018 6 12
raj 5 2018 6 12
gopi 2 2018 6 12
gopi 3 2018 6 12
gopi 6 2018 6 12
mani 3 2018 6 12
mani 4 2018 6 12
mani 5 2018 6 12
mani 7 2018 6 12
【问题讨论】:
您能否添加查询以重新创建您的表。广告请修正格式。所以我们可以轻松复制数据 你没有显示你的表的定义,没有它很难给出一个好的答案。见Why should I provide an MCVE for what seems to me to be a very simple SQL query? 您不应该将逗号分隔的值存储在单个列中。如果您已正确规范化您的数据模型,您现在不需要“拆分”这些值 【参考方案1】:欢迎来到 ***。
假设你有如下表结构:
CREATE TABLE t (name TEXT, role_collection TEXT, d DATE);
还有你的样本数据:
INSERT INTO t VALUES ('raj','3,5','2018-6-12'),
('gopi','2,3,6','2018-6-12'),
('raj','3,4,5,7','2018-6-12');
使用STRING_TO_ARRAY
创建一个包含逗号分隔的role_collection 值的数组 - 如果列role_collection
还不是TEXT[]
或VARCHAR[]
类型。然后使用UNNEST
可以提取这个数组的所有元素,如下所示:
SELECT name, UNNEST(STRING_TO_ARRAY(role_collection,',')),d
FROM t;
name | unnest | d
------+--------+------------
raj | 3 | 2018-06-12
raj | 5 | 2018-06-12
gopi | 2 | 2018-06-12
gopi | 3 | 2018-06-12
gopi | 6 | 2018-06-12
raj | 3 | 2018-06-12
raj | 4 | 2018-06-12
raj | 5 | 2018-06-12
raj | 7 | 2018-06-12
(9 Zeilen)
【讨论】:
以上是关于在 postgresql 查询中需要拆分行的帮助的主要内容,如果未能解决你的问题,请参考以下文章