2009-06-04 74 views
85

说我有像如何使用postgres将间隔转换为数小时?

4 days 10:00:00 

在postgres的间隔。如何转换,要几个小时(?在这种情况下106)是否有一个功能,或者我应该咬紧牙关,像做

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

注意:如果您的区间包含月或数年,也没有规定多少小时有答案,因为一个月或一年中的天数有所不同。所以小心! – Teddy 2017-07-26 08:57:20

回答

167

也许最简单的方法是:

SELECT EXTRACT(epoch FROM my_interval)/3600 
+6

如果间隔包含分钟和/或秒,可能会将结果转换为整数 – rasjani 2009-06-04 19:25:48

+34

提取时期?哦,我的这一点,在一百万年内不会超出我的想法。 – agnul 2009-06-04 19:31:30

+1

SELECT EXTRACT(epoch FROM my_interval/3600) (区间具有原生的'divide integer'支持,结果是区间,并且提取结果是整数,而不是float)。所以。 Autocast/Floor完成。 – Offenso 2015-08-12 13:24:25

12

如果你想天的整数即为编号:

SELECT (EXTRACT(epoch FROM (SELECT (NOW() - '2014-08-02 08:10:56')))/86400)::int 
-2
  select date 'now()' - date '1955-12-15'; 

下面是简单的查询,它计算总的无天。

3

为了获得最简单的方法是天数:

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; 
0

如果转换表中的字段:

  1. 定义该字段,使其包含秒: CREATE TABLE IF NOT EXISTS test ( ... field INTERVAL SECOND(0) );
  2. 提取值。 记住强制转换为int其他明智的你可以得到一个令人不快的意外,一旦间隔大: EXTRACT(EPOCH FROM field)::int
相关问题