我正在調查我剛剛繼承的數據庫的一些性能問題。我可以看到,由於查詢將數據類型轉換爲日期,因此存在很多隱式轉換。它看起來幾乎所有的日期字段都有金錢數據類型。用於在SQL Server中存儲日期值的貨幣數據類型?
有人可以告訴我一個很好的和有效的理由,爲什麼有人會使用金錢數據類型的日期?
謝謝!
我正在調查我剛剛繼承的數據庫的一些性能問題。我可以看到,由於查詢將數據類型轉換爲日期,因此存在很多隱式轉換。它看起來幾乎所有的日期字段都有金錢數據類型。用於在SQL Server中存儲日期值的貨幣數據類型?
有人可以告訴我一個很好的和有效的理由,爲什麼有人會使用金錢數據類型的日期?
謝謝!
我只是想節省空間,並有子分鐘的間隔,但設計顯然是怪異
可能是爲了避免與此有關DATETIME和SMALLDATETIME界限,但如果你說這是經常迄今爲止鑄造 - 這不太可能。
更新:
由於作爲@馬丁·史密斯說 - 它不是節省空間 - 然後設計更加怪異。
還有一個建議 - 數據是從舊的傳統數據庫系統導入的,其中日期時間值以這種方式存儲。
Obvoiusly - 如果你尋找好的和有效的理由 - 有沒有。
它不會節省任何空間。 'datetime'和'money'都是8個字節。 – 2012-02-09 11:43:23
@MartinSmith感謝您的留言,更新回答 – 2012-02-09 11:45:23
非常感謝您的回覆。 – pesi 2012-02-09 12:51:57
這種做法絕對沒有好的和有效的理由。
datetime
和money
都是8個字節。 datetime
爲date
保留4個字節,爲time
保留4個字節。
money
的範圍從-922,337,203,685,477.5808
到922,337,203,685,477.5807
。當從money
轉換爲datetime
時,整數部分將被視爲自1900-01-01
以來的天數,小數部分表示爲一天的百分比。
這意味着你失去了在time
部分精度(每0.0001
增量=8.640
秒),並能夠存儲數字過於龐大永遠cast
成功地datetime
獲得在date
部分無用多餘的規模(其中有一個最大範圍9999 AD
)
如果可能的話修復模式。
感謝您的快速響應。這證實了我的懷疑。我想這對於舊系統來說並不是那麼容易修復的。 – pesi 2012-02-09 12:47:20
有沒有好的和有效的理由。只有壞的和無效的。 – Oded 2012-02-09 11:43:04