2011-05-06 244 views
19

我必須在SQL Server 2008數據庫中存儲持續時間。這通常如何完成?在SQL Server中存儲持續時間(時間跨度)

例如,我將必須能夠存儲像值:5分鐘,8小時,10天等

我想將其存儲在一個SMALLDATETIME字段作爲mindatetime +時間跨度。或者可以作爲一個int來表示某個最小日期的偏移量。

任何人都有這方面的經驗?

+0

可能的重複[什麼是在SQL服務器數據庫中存儲時間間隔的最佳方式](http://stackoverflow.com/questions/2397547/what-is-the-best-way-to-store-time -interval-IN-A-SQL服務器數據庫) – Pekka 2013-12-02 07:44:13

回答

18

如果開始時間很重要(例如,因爲您記錄了一個事件),那麼您將始終希望將其存儲爲日期時間,以便稍後可以讀取它,存儲後續持續時間可以簡單地爲另一個「結束」日期時間。

如果其任意的持續時間(電影長度等)我將簡單地將其存儲爲秒的整數,然後添加在表示層美化代碼,以顯示它作爲小時/天等謹慎

0

我會做的是有2列一個是最後一次事件被解僱,另一個是事件之間的火災之間的時間。這樣,你可以在上次被觸發和now()之間查詢dateDiff,並查看該值是否大於兩次觸發之間的持續時間。

至於持續時間的價值,我會讓它成爲你需要的最小時間值。這樣,如果您有5分鐘的最小值,那麼該列應該在幾分鐘內。如果你在幾秒鐘內有一個最小值,那麼它應該在幾秒鐘內。

1

一字當使用開始和結束時間的方法是夏令時改變。您必須確保您使用的SQL Server數據類型支持時區信息。此外,您需要確保它支持歷史DST更改信息。例如,2007年之前美國夏令時的變更規則與現在不同。

在我們的數據庫中,我們只是爲了安全的做法,並以秒爲單位存儲開始時間,結束時間和持續時間。