我是postgresql的业余爱好者,我希望将逗号分隔列拆分为多列。我设法将列拆分为行,并根据使用此代码
的分隔字符串数插入新行INSERT INTO myTable (username, town)
SELECT
username,
regexp_split_to_table(town, E',')
FROM myTable;
现在我想要实现的是从数据库中删除原始列。任何意见,将不胜感激。
This SQLFiddle显示了我到目前为止所做的工作!
答案 0 :(得分:1)
显而易见的方法是简单地删除包含;
的行。没有新行可以包含分隔符,因为它不会被regexp_split_to_table()
返回。
delete from yourtable
where town like '%;%';
假设表格中有(生成的)主键(例如名为id
),另一种选择是使用data modifying CTE
with old_data as (
select id, username, town
from yourtable
), new_data as (
-- this will generate new primary key values not present in "old_data"
insert into yourtable (username, town)
select username, regexp_split_to_table(town, ';')
)
delete from yourtable
where id in (select id from old_data);
您的SQL小提琴和您的问题不一致。小提琴使用,
,但您的问题使用;
作为分隔符。我使用;
与您的问题保持一致
答案 1 :(得分:1)
您可以简单地标记“旧记录”然后删除它们并删除所有标志,如下所示:
ALTER TABLE yourTable ADD COLUMN new BOOLEAN DEFAULT false;
INSERT INTO yourTable (username, town, new)
SELECT
username,
regexp_split_to_table(town, E','),
true
FROM yourTable;
DELETE FROM yourTable WHERE new = false;
ALTER TABLE yourTable DROP COLUMN new;