小编典典

如何在PostgreSQL的选择查询中将表的列字段值中的字符串拆分为多行

sql

表格1

ID     ITEM
-----------------------
1      a|b|c
2      x|y|z
3      Q||S
4      ||||
5      J|K|Y|U

我想按以下方式将ITEM上方插入table2

表2

SLNO  ID   ITEMS
------------------------
1      1    a
2      1    b
3      1    c
4      2    x
5      2    y
6      2    z
7      3    Q
8      3    S
9      5    J
10     5    K
11     5    Y
12     5    U

所以我用过

INSERT INTO table2("ID","ITEMS")SELECT  ID,split_part("ITEM", '|',1) AS ITEMS FROM  table1

问题是split_part()需要指定位置索引,因此它只拆分并显示字符表示的第一个位置,

ID  ITEMS
-----------
1   a
2   x
3   Q
5   J

所以我如何达到上述目标


阅读 232

收藏
2021-04-14

共1个答案

小编典典

您可以将字符串转换为数组,然后取消嵌套该数组:

select t.id, i.item
from the_table t
  cross join unnest(string_to_array(t.items, '|')) as i(item);

如果要排除空元素(例如,在该行中4 ||||,可以使用:

select t.id, i.item
from the_table t
  cross join unnest(string_to_array(t.items, '|')) as i(item)
where nullif(trim(i.item),'') is not null;
2021-04-14