Это добавит один день.Это дает преимущество того факта, что SQL Server хранит даты в виде двух целых чисел, одно из которых представляет количество дней со дня «0» - (1 января 1900 г.), а второе - число тактов (около 3,33 мс) с полуночи(на время) *.
Чтобы ваши запросы использовали индекс ... сначала используйте эту формулу для входных параметров фильтрации или на "другой" стороне знака равенства из поля даты и времени таблиц, чтобы оптимизатор запросов выполнялне нужно выполнять вычисления для каждого поля даты и времени в таблице, чтобы определить, какие строки удовлетворяют предикату фильтра.Это делает ваш аргумент поиска "SARG-способным" (Search ARGument)
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 х 60 х 60 х 300 = 25 920 000 тиков (по счастливой случайности чуть ниже максимального значения, которое может содержать 32-битное целое число).Однако вам не нужно беспокоиться об этом при арифметическом изменении даты и времени ... При добавлении или вычитании значений из даты и времени вы можете рассматривать значение как дробь, как если бы она была точно равна дробной части дня, как если быполное значение datetime было числом с плавающей запятой, состоящим из целой части, представляющей дату, и дробной части, представляющей время).то есть
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