使用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