Я думаю, что может быть потому, что вы используете GETDATE()
в качестве 3-го параметра DATEADD
, который имеет часть времени, а также.
Это займет у вас 3 дня (фактически 3 * 24 часа позади), но это не будет отражать начало пятницы или что-либо, что происходит до 3 * 24 часа назад.
Скажите, что вы выполняете запрос в понедельник в 11:45, и вы получите все данные с пятницы, начиная с 11:45, но ничего раньше, что из-за «временной» части данные.
Ниже представлена измененная версия вашего кода, которая будет захватывать все данные/строки, которые произошли в пятницу (весь день).
MyDate>= dateadd(dd, case
substring(datename(dw,getdate()),1,3)
when 'MON'
then -3
else -1 end
,cast(cast(getdate() as date) as datetime))
Чтобы решить эту проблему, просто сделать быстрый хак и конвертировать getdate()
на сегодняшний день и в DATETIME для создания комбинации даты/времени, который содержит начало дня.
Вот краткий пример того, что он делает:
select
getdate()
, cast(getdate() as date)
, cast(cast(getdate() as date) as datetime)
2016-08-24 13:05:11.603 | 2016-08-24 | 2016-08-24 00:00:00.000
Что означает «Я думаю, что это не работает должным образом»? Какие результаты или ошибки вы получаете? – Egl
Он не фиксирует все данные, которые были получены в пятницу. Некоторые данные отсутствуют! – user6751695