Gan*_*ukh 6 postgresql timestamp
我有用于安排日历事件的时间戳列。我只想更改时间部分,同时保持日期部分不变。
我怎么可能做到?我在 postgresql 上
当前的:
2017-07-01 00:00:00
Run Code Online (Sandbox Code Playgroud)
到:
2017-07-01 17:00:00
Run Code Online (Sandbox Code Playgroud)
添加所需的间隔
select date + interval '5 hour'
Run Code Online (Sandbox Code Playgroud)
查看:Postgres 文档中的日期/时间函数和运算符。
select a.MyDate + interval '5 hour' as Result_Date
from (select '2017-07-01 00:00:00'::date myDate) a
|result_date |
|:------------------|
|2017-07-01 05:00:00|
Run Code Online (Sandbox Code Playgroud)
dbfiddle在这里
在不影响日期的情况下,您无法在任一方向(向前或向后)相对地有意义地更改时间。时间戳是日期和时间的混合体,意识到两者在任何现实世界实例中都是不可分割的。您无法通过增加时间以安全的方式从2017-07-01 00:00:00
到2017-07-01 17:00:00
。如果您尝试一下,您就是在假设日期是什么。但是,您可以设置时间戳的时间部分,使用date_trunc
. 在这种方法中,您可以确保将时间部分设置为(或至少更加确定)。只要您在设置时没有特别强制显式翻转(例如添加 25 小时),您就应该很好。我在这里看到两个问题:
这是一些显示两种方法的代码
SELECT
mydate + '7 hours' AS "+7 hours",
mydate + '17 hours' AS "+17 hours",
date_trunc('day', mydate) + '17:00:00' AS "setting to 17 hours",
date_trunc('day', mydate) + '25:00:00' AS "setting to 25 hours"
FROM (VALUES ('2017-07-02 10:00:00'::timestamp))
AS t(mydate);
+7 hours | +17 hours | setting to 17 hours | setting to 25 hours
---------------------+---------------------+---------------------+---------------------
2017-07-02 17:00:00 | 2017-07-03 03:00:00 | 2017-07-02 17:00:00 | 2017-07-03 01:00:00
(1 row)
Run Code Online (Sandbox Code Playgroud)
除了日期时间数学,想想$time=17
, vs $datetime+=17
. 其中之一更安全,更不可能造成翻车。您想将当前列增加17 小时,还是将其设置为17:00:00
当天?