将列数据拆分为两列&;将其插入到postgresql中的现有表中
将列数据拆分为两列并将其插入到postgresql中的现有表中将列数据拆分为两列&;将其插入到postgresql中的现有表中,postgresql,split,Postgresql,Split,将列数据拆分为两列并将其插入到postgresql中的现有表中 Email ----- xyz@outlook.com,xyz2@outlook.com 要按如下方式进行隔离: Email1 Email2 ------------- xyz@outlook.com xyz2@outlook.com 使用联合查询: insert into Table_Name (Email) select split_part(email::TEXT,',', 1) from s_mas_enri
Email
-----
xyz@outlook.com,xyz2@outlook.com
要按如下方式进行隔离:
Email1 Email2
-------------
xyz@outlook.com xyz2@outlook.com
使用联合查询:
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\u Name
只有一个目标电子邮件列,但您希望包含s\u mas\u
表中的两个CSV电子邮件。我们可以使用字符串到数组来完成拆分操作,如下所示:
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开始,而不是零。插入表\u名称(Email1,Email2)
已尝试,错误:不存在关系“表\u名称”的“Email1”列。您的问题不明确。如果要将其插入两列,首先必须在表中添加这些列,对吗?
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