使用 SQL Server 和 ASP.NET 时,使用Date
vs时是否需要考虑性能/存储DateTime
?
即使我不需要它,我也一直在使用DateTime
它
使用 SQL Server 和 ASP.NET 时,使用Date
vs时是否需要考虑性能/存储DateTime
?
即使我不需要它,我也一直在使用DateTime
它
DateTime 每个值占用 8 个字节
日期为 3 个字节。
我不能说低水平的表现;但是一般来说,我们发现默认情况下将值存储为 DateTime 是错误的。迟早您会遇到 UTC 问题,并且必须开始计算时间部分中包含 00:00:00.000 的日期的偏移量!
如果您只是存储日期,我会坚持使用 Date 数据类型;您将在每页中放置更多行,并为自己省去很多麻烦
取决于您存储的行数以及您使用它的目的。日期为 3 个字节,日期时间为 8 个字节。当您拥有数十亿行数据或将其用于索引时,可以快速累加。当然,存储值的分辨率也存在差异。在 date 和 datetime 之间还有其他日期类型,例如 smalldatetime,它们更紧凑,但也有不同的折衷。
注意事项:
DATE
类型是在 SQL Server 2008 中引入的,因此您的应用程序不再与 SQL Server 2005 兼容Date
类 -DATE
转换为DateTime
.NET 类DATE
SQL 类型DATETIME
你可能会从做事中减少几小时和几分钟CAST(@myDateTimeParam AS DATE)
根据我的经验:我喜欢这种新类型,并且在编写 T-SQL 或 C# 时没有遇到任何问题
请注意这一点(为比较日期混合数据类型):
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.