Postgres:更新日期并保留时间戳记的时间

问题描述 投票:9回答:2

我有一个带有timestampdatatype的字段1,值格式为2016-02-23 12:01:30

我正在运行查询:

UPDATE <table> set field1 = '2015-12-31'::timestamp::date where .....

输出更改为:

  2015-12-31 00:00:00

它将时间转换为全零。如何更改日期并保留时间戳?

postgresql timestamp
2个回答
15
投票
尝试一下:

UPDATE mytable SET field1 = '2015-12-31'::timestamp + EXTRACT(HOUR FROM field1) * INTERVAL '1 HOUR' + EXTRACT(MINUTE FROM field1) * INTERVAL '1 MINUTE' + EXTRACT(SECOND FROM field1) * INTERVAL '1 SECOND' WHERE ...

Demo here

0
投票
时间戳的减法产生一个间隔。可以将所得间隔添加到所需日期,以将所需日期与先前时间相加。

with ats (old_tz) as (select now() ) select old_tz, '2015-12-31'::timestamptz + (old_tz - date_trunc('day', old_tz)) new_tz from ats;

哎呀。直到发布后才意识到这篇文章的年代,但是仍然相信它可能对未来的读者有价值。所以我就离开它。 
© www.soinside.com 2019 - 2024. All rights reserved.