0

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

1 回答 1

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');

使用 - 以逗号分隔的 role_collection 值创建一个数组,STRING_TO_ARRAY以防列role_collectionins 不是类型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)
于 2018-07-09T10:47:22.360 回答