如何在PostgreSQL的表的每一行递增每个时间戳?

时间:2018-08-18 19:04:04

标签: sql postgresql sorting timestamp

假设我有此表(为简单起见,只有2列)

id ; created
1  ; "2018-08-18 18:46:15.111897"
2  ; "2018-08-18 18:46:15.111897"
3  ; "2018-08-18 18:46:15.111897"
4  ; "2018-08-18 18:46:15.111897"
5  ; "2018-08-18 18:46:15.111897"
6  ; "2018-08-18 18:46:15.111897"
7  ; "2018-08-18 18:46:15.111897"
8  ; "2018-08-18 18:46:15.111897"
...

我想在“创建”的每个时间戳上加上+1秒(或分钟),这样我的表就会变成

id ; created
1  ; "2018-08-18 18:46:15.111897"
2  ; "2018-08-18 18:46:16.111897"
3  ; "2018-08-18 18:46:17.111897"
4  ; "2018-08-18 18:46:18.111897"
5  ; "2018-08-18 18:46:19.111897"
6  ; "2018-08-18 18:46:20.111897"
7  ; "2018-08-18 18:46:21.111897"
8  ; "2018-08-18 18:46:22.111897"
...

之所以要“创建”值或全部相同,是因为我刚刚将列添加到了表中,现在我想确保我的条目将根据时间戳和新条目正确排序。稍后再添加到我的表格中。

1 个答案:

答案 0 :(得分:3)

仅使用id怎么样?

update t
    set created  = created + (id - 1) * interval '1 second';

如果id之间有空格,则可以使用join

update t
    set created = created + (seqnum - 1) * interval '1 second'
    from (select t.*, row_number() over (order by id) as seqnum
          from t
         ) tt
    where tt.id = t.id;