202

说我有一个间隔

4 days 10:00:00

在postgres中。如何将其转换为小时数(在这种情况下为 106?)是否有功能或者我应该硬着头皮做类似的事情

extract(days, my_interval) * 24 + extract(hours, my_interval)
4

7 回答 7

393

可能最简单的方法是:

SELECT EXTRACT(epoch FROM my_interval)/3600
于 2009-06-04T19:23:07.970 回答
27

如果你想要整数,即天数:

SELECT (EXTRACT(epoch FROM (SELECT (NOW() - '2014-08-02 08:10:56')))/86400)::int
于 2014-08-16T03:44:12.123 回答
4

要获得天数,最简单的方法是:

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;
于 2016-06-14T08:25:08.637 回答
2
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.

于 2018-04-24T08:26:01.740 回答
0

如果您转换表字段:

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

     CREATE TABLE IF NOT EXISTS test (
         ...
         field        INTERVAL SECOND(0)
     );
    
  2. 提取值。记住要转换为 int否则一旦间隔很大,你会得到一个令人不快的惊喜:

    EXTRACT(EPOCH FROM field)::int

于 2017-07-18T21:41:04.183 回答
-1

我正在使用 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; $$;
于 2021-07-14T02:31:18.667 回答
-4
         select date 'now()' - date '1955-12-15';

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

于 2016-02-17T15:02:22.847 回答