如何改变增加的一系列数字?

问题描述:

我下表在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; 
+2

这太复杂了,并且性能会变差。 –

+0

@LaurenzAlbe。 。 。这会在结果中产生顺序标识,即使原始标识中存在空白也是如此。 –