Datetime 我如何将一个时间间隔转换为postgres的小时数?
假设我有一个像Datetime 我如何将一个时间间隔转换为postgres的小时数?,datetime,postgresql,intervals,Datetime,Postgresql,Intervals,假设我有一个像 4 days 10:00:00 在研究生阶段。我如何将其转换为小时数(本例中为106小时?)是否有功能,或者我应该咬紧牙关,做类似的事情 extract(days, my_interval) * 24 + extract(hours, my_interval) 最简单的方法可能是: SELECT EXTRACT(epoch FROM my_interval)/3600 如果您想要整数,即天数: SELECT (EXTRACT(epoch FROM (SELECT (NOW(
4 days 10:00:00
在研究生阶段。我如何将其转换为小时数(本例中为106小时?)是否有功能,或者我应该咬紧牙关,做类似的事情
extract(days, my_interval) * 24 + extract(hours, my_interval)
最简单的方法可能是:
SELECT EXTRACT(epoch FROM my_interval)/3600
如果您想要整数,即天数:
SELECT (EXTRACT(epoch FROM (SELECT (NOW() - '2014-08-02 08:10:56')))/86400)::int
以下是计算总天数的简单查询。要获得天数,最简单的方法是:
SELECT EXTRACT(DAY FROM NOW() - '2014-08-02 08:10:56');
据我所知,它将返回相同的结果:
SELECT (EXTRACT(epoch FROM (SELECT (NOW() - '2014-08-02 08:10:56')))/86400)::int;
如果转换表字段:
CREATE TABLE IF NOT EXISTS test (
...
field INTERVAL SECOND(0)
);
提取(从字段中提取历元)::int
::int
转换遵循四舍五入原则。
如果您想要不同的结果,如向下舍入,您可以使用相应的数学函数,如
floor
,如果间隔包含分钟和/或秒,可以使用floor或将结果转换为整数?哦,天哪,这在一百万年内都不会出现在我的脑海中。选择EXTRACT(epoch FROM my_interval/3600)(interval有本机的“除法整数”支持,结果是interval,而EXTRACT结果是integer,而不是float)。所以Autocast/Floor done.警告:简单地提取epoch隐式地假设一个月=30天,一年=365.25天。@Teddy我们可以用它做什么?如何避免这个问题,并获得真正的时代数?太好了!谢谢你:)然而,我发现我们现在可以将其修改为SELECT extract('epoch'FROM age('2014-08-02'::timestamp))/86400
(我使用的是第9.4页),因为age(ts)
当只有一个参数时自动使用当前日期
。警告:简单地隐式提取历元会假定一个月=30天,一年=365.25天。如果间隔为“1个月0天”
,请使用提取(天从…)
将给您0
作为结果。注意:如果您的时间间隔包含月或年,则没有关于小时数的定义答案,因为一个月或一年中的天数不同。所以要小心@泰迪:更准确地说,有多个定义的答案;)这不需要区间值。我认为红移不支持区间数据类型。这只会是个大问题。
CREATE TABLE IF NOT EXISTS test (
...
field INTERVAL SECOND(0)
);
select floor((date_part('epoch', order_time - '2016-09-05 00:00:00') / 3600)), count(*)
from od_a_week
group by floor((date_part('epoch', order_time - '2016-09-05 00:00:00') / 3600));