我在PostgreSQL中有以下表格:
item id
123 100-0001
123 100-0002
123 100-0003
.....
123 100-0150
我想更改所有记录的ID以匹配745到894
表示100-0001更改为100-0745,100-0002更改为100-746等。
最终结果应为:
item id
123 100-0745
123 100-0746
123 100-0747
.....
123 100-0894
id的类型为citext
。
我该怎么做?
注意:表格包含更多记录,不应该生效。
答案 0 :(得分:3)
我打破了字符串 - 前四个字符不应该被更改(100-
)。第二部分可以转换为整数,用744求和得到新值,并填充回四个字符:
UPDATE mytable
SET id = SUBSTR(id, 0, 5) ||
LPAD((SUBSTR(id, 5)::integer + 744)::varchar, 4, '0')
答案 1 :(得分:0)
在row_number()
声明中使用join
和update
:
update t
set id = '100-' || lpad(seqnum, 4, '0')
from (select t.*, row_number() over (partition by item order by id) as seqnum
from t
) tt
where t.id = tt.id;