2011-01-06 41 views
1

在數據庫中存儲諸如「7年4個月」(例如,多年的經驗)的最佳方式是什麼?浮動?如何在DB中存儲時間長度

+1

重複? http://stackoverflow.com/questions/718332/what-is-the-best-way-to-represent-a-timespan-in-sql-server-ce – hometoast 2011-01-06 16:43:34

+1

@hometoast - 不同的RDBMS – JNK 2011-01-06 16:45:18

+0

感謝您的所有答案。我想我會用int。 – Prabhu 2011-01-06 16:54:17

回答

6

存儲BIGINT秒或滴答數。

在您的具體示例(多年經驗)中,最好存儲開始日期並計算讀取數據庫時的時間量。

2

使用 [讀BIGINT爲SQLServer的]來表示轉換爲秒

0

存儲它作爲時間是差異。即一個字符串7 years 4 months。 爲什麼?那麼讓我們從另一端思考 - 什麼是7年(或4個月)?表面上,人們會認爲這是一段時間間隔,但事實並非如此。無論月份還是年份都有固定的時間單位(天),因此根據間隔的起點,實際值會有所不同。

感謝所有的優缺點,但其實這是因爲是解決問題的唯一答案。 7 years 4 months不是可以無起點序列化的值。因此表示==值。

0

作爲該字段是一個變量,接近最好的方法是存儲事件的(估計)的日期。

到目前爲止的時間應該在運行時計算。

編輯:如果需要,您還可以存儲在運行時間計算中使用的結束日期。

0

這取決於,如果您存儲了時間段 - 即開始日期和結束日期,則這會成爲可推導的值,並且您可以每次計算。

如果你打算存儲7.4來模擬year.month,那麼你的粒度是有限的。你永遠不會顯示幾周,如果添加了7.14的值,會發生什麼?

2

由於SQL-server 2005缺少僅限於時間的數據類型,因此我會使用適當大小的整數類型來保存「某些時間間隔」的計數 - 秒,毫秒等。我會盡全力翻譯(除了比較)在應用程序層;除了作爲int/bigint/etc之外,沒有理由讓數據庫擔心它們。

0

我不認爲你真的需要第二個精度,如果你存儲類似多年的經驗。我只是把這個數字存儲起來,並把它作爲一個浮點數來存儲。

所以「7年4個月」會相等= 7 + 4/12 = 7.333 ..