如何使用postgres将间隔转换为若干小时?

时间:2009-06-04 19:08:20

标签: datetime postgresql intervals

说我有一个像

这样的间隔
4 days 10:00:00
postgres中的

如何将其转换为若干小时(在这种情况下为106?)是否有功能或者我应该咬紧牙关并执行类似

的操作
extract(days, my_interval) * 24 + extract(hours, my_interval)

7 个答案:

答案 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)

如果转换表字段:

  1. 定义字段,使其包含秒:

     CREATE TABLE IF NOT EXISTS test (
         ...
         field        INTERVAL SECOND(0)
     );
    
  2. 提取值。 请记住施放到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';

以下是计算总天数的简单查询。