С этим запросом две проблемы.Во-первых, это использование локализованной строки.Для меня это выглядит так, будто он спрашивает о рядах между январем и апрелем.Однозначный формат дата - YYYYMMDD
.YYYY-MM-DD
сам по себе может не работать на SQL-сервере, так как он все еще зависит от языка.Литерал даты ODBC {d'YYYY-MM-DD'}
также работает однозначно.
Во-вторых, параметры даты не имеют времени, которое по умолчанию равно 00:00
.Сохраненные даты имеют элемент времени, что означает, что они находятся за пределами диапазона поиска, даже если параметр даты был распознан.
Запрос должен измениться на:
select
*
from [dbo].[TB_AUDIT] TBA
where
cast(TBA.ActionDate as date) between '20181001' and '20181004'
или
cast(TBA.ActionDate as date) between {d'2018-10-01'} and {d'2018-10-04'}
Обычно применение функции к полю не позволяет серверу использовать какие-либо индексы.SQL Server достаточно умен, чтобы преобразовать его в запрос, охватывающий всю дату, по сути аналогичный
where
TBA.ActionDate >='2018:10:01T00:00' and TBA.ActionDate <'2018-10-05T00:00:00'