次のような間隔があるとしましょう
4 days 10:00:00
postgresで。それを数時間(この場合は106)に変換するにはどうすればよいですか?機能がありますか?
extract(days, my_interval) * 24 + extract(hours, my_interval)
おそらく最も簡単な方法は次のとおりです。
SELECT EXTRACT(Epoch FROM my_interval)/3600
整数、つまり日数が必要な場合:
SELECT (EXTRACT(Epoch FROM (SELECT (NOW() - '2014-08-02 08:10:56')))/86400)::int
日数を取得する最も簡単な方法は次のとおりです。
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;
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
などの対応する数学関数を使用できます。
テーブルフィールドを変換する場合:
秒が含まれるようにフィールドを定義します。
CREATE TABLE IF NOT EXISTS test (
...
field INTERVAL SECOND(0)
);
値を抽出します。 intにキャストすることを忘れないでくださいそうでない場合、間隔が大きくなると不快な驚きを得ることができます:
EXTRACT(Epoch FROM field)::int