2009-12-21 75 views
4

我有一個類型爲time with time zone的數據庫字段。如何在EST5EDT時區以輸出格式hh:mm:ss查詢此字段?如何在Postgres中格式化「帶時區的時間」?

所有我能找到的是使用多個調用EXTRACT

SELECT EXTRACT(HOUR FROM TIME WITH TIME ZONE '20:38:40-07' AT TIME ZONE 'EST5EDT'); 

[編輯:]

需要明確的是,這個查詢:

SELECT TIME WITH TIME ZONE '20:38:40.001-07' AT TIME ZONE 'EST5EDT'; 

返回「22: 38:40.001「,但我只想」22:38:40「作爲輸出。

回答

9

使用TO_CHAR()功能:

SELECT TO_CHAR(date '2001-09-28' +time, 'HH24:MI:SS') 

看到TO_CHAR只接受時間戳數據類型,您需要將任意日期值與您的時間值聯合起來。

+0

這就是我之前想到的,但只適用於時間戳,而不是時間:「錯誤:函數to_char(帶時區的時間,未知)不存在」。 – griffin 2009-12-22 00:20:22

+0

你可以這樣測試:SELECT TO_CHAR(TIME WITH TIME ZONE '20:38:40.001-07','HH24:MI:SS') – griffin 2009-12-22 00:21:41

+0

非常棒。謝謝! – griffin 2009-12-22 17:16:32

0

您可以簡單地使用CAST和轉換爲時間型:

SELECT CAST(now() AS TIME) 

(當然,其結果也會有不同的數據類型)

+0

謝謝。但我怎樣才能使格式hh:mm:ss?你的輸出仍然有毫秒。 – griffin 2009-12-21 22:38:24

3

「時間與時區」基本上是一個虛假的數據類型,因此在很多情況下並沒有得到真正的支持。

你如何定義「時間與時區」?時區依賴於數據類型中未包含的日期,因此尚未完全定義。 (是的,SQL標準是強制性的,但這並不是理智的)

你可能是最好的先修復你正在使用的數據類型。可以使用時區和時區,也可以使用時間(不帶時區)。

+1

+1這是一個很好的視角。我可以切換到沒有時區的時間,讓我的生活更輕鬆。 – griffin 2009-12-22 17:17:09

相關問題