说我有一个像
这样的间隔4 days 10:00:00
postgres中的如何将其转换为若干小时(在这种情况下为106?)是否有功能或者我应该咬紧牙关并执行类似
的操作extract(days, my_interval) * 24 + extract(hours, my_interval)
答案 0 :(得分:232)
可能最简单的方法是:
SELECT EXTRACT(epoch FROM my_interval)/3600
答案 1 :(得分:14)
如果你想要整数,即天数:
SELECT (EXTRACT(epoch FROM (SELECT (NOW() - '2014-08-02 08:10:56')))/86400)::int
答案 2 :(得分:5)
以最简单的方式获得天数:
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;
答案 3 :(得分:1)
如果转换表字段:
定义字段,使其包含秒:
CREATE TABLE IF NOT EXISTS test (
...
field INTERVAL SECOND(0)
);
提取值。 请记住施放到int 其他方面,如果间隔很大,你会得到一个令人不快的惊喜:
EXTRACT(EPOCH FROM field)::int
答案 4 :(得分:1)
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));
::int
转换遵循舍入原则。
如果您想要一个不同的结果,例如向下舍入,您可以使用相应的数学函数,例如floor
。
答案 5 :(得分:0)
我正在使用 PostgreSQL 11,我创建了一个函数来获取 2 个不同时间戳之间的小时数
create function analysis.calcHours(datetime1 timestamp, datetime2 timestamp)
returns integer
language plpgsql as $$
declare
diff interval;
begin
diff = datetime2 - datetime1;
return (abs(extract(days from diff))*24 + abs(extract(hours from diff)))::integer;
end; $$;
答案 6 :(得分:-4)
select date 'now()' - date '1955-12-15';
以下是计算总天数的简单查询。