在PostgreSQL查询中的拆分行上需要帮助

时间:2018-07-09 07:38:37

标签: sql postgresql split unnest

我有一张下表,我需要按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

1 个答案:

答案 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)