我有一张下表,我需要按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
答案 0 :(得分:1)
欢迎使用Stackoverflow。
假设您具有以下表结构:
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)