2017-01-01 729 views
1

嗨我有一個像下面這樣的Postgresql查詢來計算{1}和{2}的DateTime差異在幾分鐘內。postgresql查詢小時分鐘和秒

CAST(ROUND(EXTRACT(EPOCH from (({2}::timestamp) - ({1}::timestamp)))/60) AS INT) 

我想計算以小時,分鐘和秒之差顯示如下:

3小時31分鐘42秒

我需要爲顯示像上面怎麼操作?

+0

是否可能存在≥24小時的時差?另外,請提供源列的準確數據類型以及您的Postgres版本。沒有它,這個問題就模糊不清。 –

回答

1
SELECT to_char((col1 - col0), 'HH24 hrs MI "minutes" SS "seconds"') FROM T1; 

這裏是一個sqlfiddle:link

TO_CHAR函數需要的間隔(間隔是兩個時間戳之間的時間間隔,並減去時間戳給你的間隔)。然後它需要一個格式化,你可以應用你想要的東西。

Formatting functions in PostgreSQL

+1

減去*日期*會給你一個'nteger'(中間的天數)。減去*時間戳*會產生一個「間隔」,它永遠不會被稱爲「日期間隔」。 –

1

timestamp 2個或timestamptz值的減法產生interval。 (雖然減去2個date值產生integer!)
Details about date/time types in the manual.

一個interval的默認文本表示可能是足夠的:

SELECT timestamp '2017-1-6 12:34:56' - timestamp '2017-1-1 0:0'; 

結果是一個interval,顯示爲:

5 days 12:34:56 

如果您需要問題中的格式,則需要指定如何處理> = 24 ho URS。添加'天'?或者相應地增加小時數?

@Nobody provided如何使用to_char()。但添加天的一種方式或其他:

SELECT to_char(ts_col2 - ts_col1, 'DD" days "HH24" hours "MI" minutes "SS" seconds"'); 

結果:

05 days 12 hours 34 minutes 56 seconds 

'天'覆蓋休息。默認情況下,結果中沒有更多的時間單位。