如何更改增加的数字系列?

时间:2016-06-20 07:43:08

标签: sql postgresql sql-update

我在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

我该怎么做?

注意:表格包含更多记录,不应该生效。

2 个答案:

答案 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()声明中使用joinupdate

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;