簡體   English   中英

如何使用 postgres 將間隔轉換為小時數?

[英]How do I convert an interval into a number of hours with postgres?

說我有一個像

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

如果轉換表字段:

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

     CREATE TABLE IF NOT EXISTS test ( ... field INTERVAL SECOND(0) );
  2. 提取值。 記住要強制轉換為 int否則一旦間隔很大,你會得到一個令人不快的驚喜:

    EXTRACT(EPOCH FROM field)::int

我正在使用 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; $$;
         select date 'now()' - date '1955-12-15';

這是計算總天數的簡單查詢。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM