如何改变增加的一系列数字?
问题描述:
我下表在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
类型。
我该怎么做?
注意:表格包含更多记录,它们不应该生效。
答
我会打破串起来 - 前四个字符不应该被改变(100-
)。第二部分可以转换为一个整数,与744相加以获得新值,并填充回四个字符:
UPDATE mytable
SET id = SUBSTR(id, 0, 5) ||
LPAD((SUBSTR(id, 5)::integer + 744)::varchar, 4, '0')
答
随着row_number()
并在update
语句join
:
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;
这太复杂了,并且性能会变差。 –
@LaurenzAlbe。 。 。这会在结果中产生顺序标识,即使原始标识中存在空白也是如此。 –