代码之家  ›  专栏  ›  技术社区  ›  agnul

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

  •  106
  • agnul  · 技术社区  · 15 年前

    比如说我有一段时间间隔

    4 days 10:00:00
    

    在Postgres。如何将其转换为若干小时(在本例中是106小时?)有什么作用吗?还是我应该咬紧牙关做点什么

    extract(days, my_interval) * 24 + extract(hours, my_interval)
    
    6 回复  |  直到 6 年前
        1
  •  210
  •   Magnus Hagander    15 年前

    最简单的方法可能是:

    SELECT EXTRACT(epoch FROM my_interval)/3600
    
        2
  •  13
  •   Pujan    10 年前

    如果需要整数,即天数:

    SELECT (EXTRACT(epoch FROM (SELECT (NOW() - '2014-08-02 08:10:56')))/86400)::int
    
        3
  •  5
  •   belveryin    8 年前

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

    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;
    
        4
  •  1
  •   nick    6 年前
    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
  •  1
  •   nick    6 年前

    如果转换表字段:

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

       CREATE TABLE IF NOT EXISTS test (
           ...
           field        INTERVAL SECOND(0)
       );
      
    2. 提取值。 记住要投射到int 另一方面,一旦间隔过大,你会得到一个不愉快的惊喜:

      EXTRACT(EPOCH FROM field)::int

        6
  •  -3
  •   Arunkumar Papena    9 年前
             select date 'now()' - date '1955-12-15';
    

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