我正在尝试更新表格,以便我可以从其中一列删除前置零。我想做这样的事情:
UPDATE oh_person SET identifier = TRIM(LEADING '0' FROM identifier)
问题是某些行已经具有没有前置零的标识符,并且由于此列应该是唯一的,因此它会在这些实例中引发错误。可以这样做吗?
UPDATE oh_person SET identifier = TRIM(LEADING '0' FROM identifier) ON CONFLICT (identifier) DO NOTHING
我知道那个特定的查询是不可能的,但是还有其他语法可以实现吗?
答案 0 :(得分:4)
示例数据:
create table oh_person(identifier text unique);
insert into oh_person
values ('012'), ('0012'), ('0015'), ('015');
do $$
declare
r record;
begin
for r in
select identifier
from oh_person
where left(identifier, 1) = '0'
loop
begin
update oh_person
set identifier = trim(leading '0' from identifier)
where identifier = r.identifier;
exception
when unique_violation then
raise notice '% not updated', r.identifier;
end;
end loop;
end $$;
NOTICE: 0012 not updated
NOTICE: 015 not updated
结果:
select * from oh_person;
identifier
------------
0012
015
12
15
(4 rows)