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

Arn*_*bal 8 postgresql

我有一个field1 timestamp,datatype值格式为2016-02-23 12:01:30.

我正在运行查询:

UPDATE <table> set field1 = '2015-12-31'::timestamp::date where .....
Run Code Online (Sandbox Code Playgroud)

输出变为:

  2015-12-31 00:00:00
Run Code Online (Sandbox Code Playgroud)

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

Gio*_*sos 14

试试这个:

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 ...
Run Code Online (Sandbox Code Playgroud)

在这里演示


Nep*_*lim 9

还有另一种方法,使用 DateTime 类型。

因此,如果要将表的日期设置为今天,可以使用以下命令:

UPDATE table SET column = current_date::date + column::time;

current_date用“2019-02-23”切换,它应该也能工作。


Ste*_*.sm 7

只需添加新日期和现有时间即可。这里是:

UPDATE mytable 
SET field1 = '2015-12-31'::date + field1::time with time zone
WHERE ...;
Run Code Online (Sandbox Code Playgroud)

甚至更清晰的切割:

UPDATE mytable 
SET field1 = field1 - field1::date + '2015-12-31'::date
WHERE ...;
Run Code Online (Sandbox Code Playgroud)