使用SQL Server & ASP.NET時,在使用Date
與DateTime
時是否存在性能/存儲方面的考慮因素?使用Date vs DateTime時是否存在性能差異或存儲差異?
即使我並不需要它,我一直在使用DateTime
對大多數事情
使用SQL Server & ASP.NET時,在使用Date
與DateTime
時是否存在性能/存儲方面的考慮因素?使用Date vs DateTime時是否存在性能差異或存儲差異?
即使我並不需要它,我一直在使用DateTime
對大多數事情
日期時間需要每個值8個字節
日期是3個字節。
我不能說低水平的表現;然而,通常我們發現在默認情況下將值存儲爲DateTime是個錯誤。您遲早會遇到UTC問題,並且必須開始計算時間部分中具有00:00:00.000的日期的偏移量!
如果你只是存儲日期,我會堅持日期數據類型;您將每頁適合更多行併爲您節省大量麻煩
取決於您要存儲的行數以及您使用的行數。日期是3個字節,日期時間是8個字節。當你擁有數十億行數據或者將它用於索引時,可以快速加起來。當然,存儲值的分辨率也有差異。日期和日期時間之間還有其他日期類型,例如smalldatetime,它們更加緊湊,並且具有不同的折衷。
考慮:
DATE
類型在SQL Server 2008中引入,因此您的應用程序與SQL Server 2005不兼容Date
類在.NET - DATE
轉化爲DateTime
.NET類DATE
SQL類型DATETIME
順利做CAST(@myDateTimeParam AS DATE)
從我的經驗:我喜歡這個新類型,也沒有與它的問題,而編程的T-SQL或C#
注意這一點(混合數據類型DAT E在特點比較):
DECLARE @startDay DATE = '2012-04-11' -- day
DECLARE @endDay DATE = '2012-04-13' -- day
DECLARE @eventTime DATETIME = '2012-04-13 12:00' -- point in time (noon)
IF @eventTime BETWEEN @startDay AND @endDay PRINT 'In period.' ELSE PRINT 'Not in period!'
結果是:
Not in period!
在BETWEEN
特點比較@endDay
澆鑄至DATETIME
(在時間點;與@eventTime
共同類型),我想 - 什麼給不直觀的結果。
比較:
DECLARE @startDay DATE = '2012-04-11' -- day
DECLARE @endDay DATE = '2012-04-13' -- day
DECLARE @eventTime DATE = '2012-04-13' -- day
IF @eventTime BETWEEN @startDay AND @endDay PRINT 'In period.' ELSE PRINT 'Not in period!'
結果:
In period.
而且它:
DECLARE @startDay DATETIME = '2012-04-11' -- day, but point in time in fact 00:00.000
DECLARE @endDay DATETIME = '2012-04-13' -- day, but point in time in fact 00:00.000
DECLARE @eventTime DATETIME = '2012-04-13' -- day, but point in time in fact 00:00.000
IF @eventTime BETWEEN @startDay AND @endDay PRINT 'In period.' ELSE PRINT 'Not in period!'
結果:
In period.
這是一個也取決於「日期」的內容以及是否需要TZ意識(我的星期五可能不是你的星期五)。並不是說將所有內容存儲爲UTC要好得多......因爲它仍然不能捕獲TZ本身。還有一個'DATETIMEOFFSET'類型;但是,我不知道它是如何映射到.NET的: – 2012-04-13 16:41:43
@ Click-Rex能否解釋你的上下文? – Pankaj 2012-04-13 16:42:41
DateTime只是「本地時間」 - 它沒有時區表示的概念,這意味着你必須知道什麼時區是爲了讓你準確地解碼它所寫的時區,還有一些問題,比如夏令時埋在那裏,這就是關於UTC的評論 - 所有的應用程序都會將日期轉換爲UTC存儲,並返回到本地時間顯示,聽起來很容易嗎?不是真的 - 實際上很難讓所有的應用程序在沒有大量精力和測試的情況下做到這一點,DateTimeOffset類型是爲了試圖緩解這個問題而推出的 – stephbu 2012-04-13 16:47:57