如何将表中fullname列的逗号分隔值拆分后插入对应新列?
解决方法
你之前的问题在于用了INSERT语句——这是用来新增行的,但你需要的是更新现有行的新字段值,而且CTE没有和原表关联,没法对应到正确的行。正确的流程分两步:添加新列,然后用UPDATE批量更新数据。
1. 先添加新列
执行以下语句给test表新增firstname和lastname列(可根据实际需求调整字段长度,比如VARCHAR(100)):
ALTER TABLE test ADD COLUMN firstname VARCHAR; ALTER TABLE test ADD COLUMN lastname VARCHAR;
2. 拆分并更新数据
直接用UPDATE语句,结合split_part拆分fullname,同时用TRIM去掉拆分后可能带的空格(比如原字段里逗号后的空格):
UPDATE test SET firstname = TRIM(split_part(fullname, ',', 1)), lastname = TRIM(split_part(fullname, ',', 2));
3. 验证结果
执行查询确认数据是否正确拆分:
SELECT fullname, firstname, lastname FROM test;
为什么你的原方法出错?
INSERT是插入新记录,不是修改已有行的字段,所以会导致新增无效行(或关联匹配错误)。- 你的CTE没有保留原表的唯一标识(比如主键),无法将临时表的拆分结果对应到原表的具体行,WHERE条件里的关联逻辑不成立。
内容的提问来源于stack exchange,提问作者ahron
相关产品推荐
相关产品推荐

