2011-08-03 98 views
1

在MySQL中,我可以創建一個帶有時間字段的表,並且該值可以高達838:59:59(839小時 - 1秒)。我剛剛在PostgreSQL中讀到,小時字段不能超過23:00:00(24小時)。有沒有解決的辦法?我試圖製作一個簡單的數據庫,用於跟蹤分鐘花費的時間,因此它需要花費幾分鐘的時間才能超過23小時。我可以在MySQL中做到這一點,但我需要使用PostgreSQL。我谷歌搜索,但沒有找到我在找什麼,所以我希望我只是沒有使用正確的關鍵字。PostgreSQL中超過23:59:59的時間?

回答

3

儘管它們使用相同的符號,但是一天中的時間與已用時間之間存在差異。它們的一些值重疊,但它們是不同的域。如果您正在討論一天中的某個時間,則838不是一小時內的有效值。 838 如果您正在討論已用時間,則爲一小時的有效值。

這種區別導致兩種不同的數據類型:timestamp and interval

create table intervals (
    ts timestamp primary key, 
    ti interval not null 
); 

insert into intervals values (current_timestamp, '145:23:12'); 

select * 
from intervals; 

2011-08-03 21:51:16.837 145:23:12 

select extract(hour from ti) 
from intervals 

145 
+0

現在,這聽起來像它正是我想要的。謝謝! – Forrest

0

我相信你是對的,但它不應該成爲一個問題。建議存儲UNIX時間整數,以便當您「插入」並再次出來時,然後將增量添加到int字段。

這將產生花費的秒數,可以將其平均翻譯爲小時:分:秒格式。

可以通過從結束時間戳中減去開始時間戳來計算增量(差異)。

+0

我希望避免這樣做,如果可以的話,但它聽起來像這是做到這一點的最佳方式。 – Forrest

+0

Mmn,對不起。但是,時間戳範例很容易處理,並且可以輕鬆地從任何編程語言中操作......支持整數,我的意思是。一旦你習慣了它,它會感覺很好,並且增加一定的時間就像(僞代碼示例)var +(1 * 60 * 60)一樣容易,這會增加一個小時。祝你好運。 –

+0

不,你只需要使用INTERVAL數據類型。 –

0

你可以使用一個日期時間字段...839小時正對順序34.9天東西...

+0

您輸入什麼日期時間值來表示839小時,以及您爲什麼要這樣做,而不是使用專門用於表示間隔的數據類型? –

6

Postgres有沒有「時域」 - 它有幾個date/time types其服務於不同的需求。我認爲最適合您需要的類型是INTERVAL