2012-12-16 56 views
1

好了,現在讓我舉一個例子在sql server上存儲BigInt的日期 - 這是一個好主意嗎?

日期:15.12.2012 00:16:39

現在,這將被存儲爲

20121215001639 

現在,例如,如果我想檢索行超過30分鐘(30 * 60 = 1800秒)

我可以做同樣

where date<20121215001639+1800 

那麼這會是一種表現方式,而不是存儲爲日期時間?

+6

如果它是一個日期 - 將它存儲爲'DATE'或'DATETIME' - 爲什麼要把它存儲爲不是它的東西?有什麼好處?另請參閱:[踢壞的習慣:選擇錯誤的數據類型](http://sqlblog.com/blogs/aaron_bertrand/archive/2009/10/12/bad-habits-to-kick-using-the-wrong- data-type.aspx) - 你應該總是使用最合適的數據類型 - 畢竟這就是他們的存在! –

+0

加入1800不會給你30分鐘的格式。 –

回答

10

我完全同意上面的marc_s的評論,但我決定做一個測試,只是爲了好玩。

我創建了兩個表格,其中一個帶有datetime列,另一個帶有bigint列,表示相同的數據。

這裏是SQL小提琴:http://www.sqlfiddle.com/#!3/74976/3

我已經運行此查詢500,1000和5000記錄每一次注意到,執行計劃是相同的,所以從性能上來看有一個在沒有收穫使用bigint

然而,bigint方法有明顯的缺點;他們中的一些:

  • 轉換到/從bigint需要更多的代碼,以每月寫
  • 操作,如濾波需要更復雜的/可讀性變差查詢
  • Management Studio中尋找結果網格,如果您看到分隔的日期部分,則無法「儘快」解析/解釋結果。
+0

感謝您的評論。有沒有任何網站顯示如何使用日期類型在sql server上有很多例子?我想保留所有的日期時間格林威治標準時間 – MonsterMMORPG

+0

@MonsterMMORPG我認爲這足以檢查出Transact SQL [日期時間文檔](http://msdn.microsoft.com/en-us/library/ms187819(v = sql .105).aspx)和[日期和時間函數](http://msdn.microsoft.com/en-us/library/ms186724(v = sql.105).aspx)。 – GolfWolf

+0

也用於存儲UTC/GMT值,如果遇到任何其他問題,請確保您使用'getutcdate()'而不是'getdate()' – GolfWolf

相關問題