2009-06-04 18 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
相關問題