它会增加一天。这利用了 SQL Server 将日期存储为两个整数这一事实的优势,一个表示自第“0”天 - (1900 年 1 月 1 日)以来的天数,第二个表示自午夜以来的滴答数(约 3.33 毫秒) (当时)*。
要使您的查询使用索引...首先在输入过滤参数上使用此公式,或者在表日期时间字段的等号的“另一”侧使用此公式,以便查询优化器不必对表中的每个日期时间字段运行计算以确定哪些行满足过滤谓词。这使您的搜索参数“支持 SARG”(搜索参数)
Where MyDateTimeColumn > DateAdd(day,
datediff(day,0, @MydateParameter), 0) -- SARG-able
而不是
Where DateAdd(day, datediff(day,0,
MyDateTimeColumn ), 0) > MydateParameter -- Not SARG-able •
在你的情况下,这意味着使用
Select *
FROM [myTable]
WHERE [myDate] > @someDate - 1
而不是
Select *
FROM [myTable]
WHERE [myDate] + 1 > @someDate
注意。在内部,第二个整数(时间部分)存储刻度。一天中有 24 x 60 X 60 X 300 = 25,920,000 个滴答声(偶然地刚好低于 32 位整数可以容纳的最大值)。但是,在对日期时间进行算术修改时,您无需担心这一点......当从日期时间中添加或减去值时,您可以将该值视为一个分数,就好像它完全等于一天的小数部分一样,就好像完整的日期时间值是一个浮点数,由表示日期的整数部分和表示时间的小数部分组成)。即,
Declare @Dt DateTime Set @Dt = getdate()
Set @Dt = @Dt + 1.0/24 -- Adds one hour
Select @Dt
Set @Dt = @Dt - .25 -- Moves back 6 hours
Select @Dt