将列数据分为两列,并将其插入到postgresql中的现有表中。
Email
-----
xyz@outlook.com,xyz2@outlook.com
想像下面这样隔离:
Email1 Email2
-------------
xyz@outlook.com xyz2@outlook.com
insert into s_mas_enrich (email_1, Email_2)
select *,
split_part(email::TEXT,',', 1) Email_1,
split_part(email::TEXT,',', 2) Email_2
from s_mas_enrich
答案 0 :(得分:1)
使用联合查询:
insert into Table_Name (Email)
select split_part(email::TEXT,',', 1) from s_mas_enrich
union all
select split_part(email::TEXT,',', 2) from s_mas_enrich;
这假设您的目标表Table_Name
仅具有一个目标电子邮件列,但是您想同时包含s_mas_enrich
表中的这两个CSV电子邮件。
答案 1 :(得分:0)
我们可以使用string_to_array
完成拆分操作,如下所示:
postgres=# select string_to_array('yz@outlook.com,xyz2@outlook.com',',');
string_to_array
-----------------------------------
{yz@outlook.com,xyz2@outlook.com}
(1 row)
postgres=# select (string_to_array('yz@outlook.com,xyz2@outlook.com',','))[1] as email1;
email1
----------------
yz@outlook.com
(1 row)
postgres=# select (string_to_array('yz@outlook.com,xyz2@outlook.com',','))[2] as email2;
email2
------------------
xyz2@outlook.com
(1 row)
postgres=# select (string_to_array('yz@outlook.com,xyz2@outlook.com',','))[1] as email1,(string_to_array('yz@outlook.com,xyz2@outlook.com',','))[2] as email2;
email1 | email2
----------------+------------------
yz@outlook.com | xyz2@outlook.com
postgres=# insert into table_name (email_1, email_2)
select
(string_to_array(email::varchar,','))[1],
(string_to_array(email::varchar,','))[2]
from
s_mas_enrich
注意:PostgreSQL的数组索引从1开始,而不是零。