web-dev-qa-db-ja.com

postgresで間隔を時間数に変換するにはどうすればよいですか?

次のような間隔があるとしましょう

4 days 10:00:00

postgresで。それを数時間(この場合は106)に変換するにはどうすればよいですか?機能がありますか?

extract(days, my_interval) * 24 + extract(hours, my_interval)
126
agnul

おそらく最も簡単な方法は次のとおりです。

SELECT EXTRACT(Epoch FROM my_interval)/3600
251
Magnus Hagander

整数、つまり日数が必要な場合:

SELECT (EXTRACT(Epoch FROM (SELECT (NOW() - '2014-08-02 08:10:56')))/86400)::int
15

日数を取得する最も簡単な方法は次のとおりです。

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;
6
belveryin
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などの対応する数学関数を使用できます。

1
haoming

テーブルフィールドを変換する場合:

  1. 秒が含まれるようにフィールドを定義します。

     CREATE TABLE IF NOT EXISTS test (
         ...
         field        INTERVAL SECOND(0)
     );
    
  2. 値を抽出します。 intにキャストすることを忘れないでくださいそうでない場合、間隔が大きくなると不快な驚きを得ることができます:

    EXTRACT(Epoch FROM field)::int

1
Janek Olszak