postgresql 更新timestamp列,使时间戳序列沿着排序的数值列递增

of1yzvn4  于 2023-04-11  发布在  PostgreSQL
关注(0)|答案(1)|浏览(168)

我有一个表,其中列是单调递增的整数(id)。我需要更新列updated_at(timestamp)以创建一系列递增的时间戳,所有时间戳都是过去的。确切的步骤并不重要,只要时间戳单调递增。

create table temp1 (
        id serial not null,
        bar varchar(35),
        updated_at timestamp
        )
;

insert into temp1
    (bar)
    values
    ('val1'),
    ('val2'),
    ('val3')
    ;

select * from temp1;
id | bar  | updated_at 
----+------+------------
  1 | val1 | NULL
  2 | val2 | NULL
  3 | val3 | NULL
(3 rows)
luaexgnf

luaexgnf1#

一个简单的方法是使用日期/时间数学运算符。例如,这会生成一个时间戳序列,起始日期为过去的3个月,并将每行的时间戳与起始日期相比增加id秒:

update temp1
set updated_at = (now() - interval '3 months' + interval '1 second' * id)
    ;

select * from temp1;
id | bar  |         updated_at         
----+------+----------------------------
  1 | val1 | 2023-01-06 17:49:59.644966
  2 | val2 | 2023-01-06 17:50:00.644966
  3 | val3 | 2023-01-06 17:50:01.644966
(3 rows)

参见:

相关问题