表格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
所以我如何达到上述目标
您可以将字符串转换为数组,然后取消嵌套该数组:
select t.id, i.item from the_table t cross join unnest(string_to_array(t.items, '|')) as i(item);
如果要排除空元素(例如,在该行中4 ||||,可以使用:
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;