Как избежать проблемы фильтрации дат в SQL?
Я ищу несколько записей, основанных на критериях поиска. Я получаю данные за день до этого. (скажем , если я беру данные для 8-го, то показываются записи 7-го). Фильтрация полей даты все они относятся к типу данных datetime, который преобразуется в date. Он работал на одном сервере, принимая ту же дату, установленную для фильтрации, но здесь была взята предыдущая дата. Хранимые процедуры одинаковы на обоих серверах.
Что я уже пробовал:
Образец SP для того же самого
-- EXEC [TestReport] '2019-04-08', '2019-04-08' ALTER PROCEDURE [dbo].[TestReport] @FromDate datetime, @ToDate datetime AS BEGIN select * from test where CONVERT(date,settlementDate) between CONVERT(date,@FromDate) and CONVERT(date,@ToDate) END
Richard Deeming
1) объявите свои параметры как date
, а не объявлять их как datetime
и CONVERT
Инг их.
2) Какой тип данных является settlementDate
колонна? Если это так datetime
или datetime2
, и вы просто пытаетесь игнорировать временную часть, а затем меняете свой фильтр на:
WHERE settlementDate >= @FromDate And settlementDate < DateAdd(day, 1, @ToDate)
Таким образом, SQL сможет использовать индекс для столбца (если таковые имеются) чтобы ускорить запрос.
Если это ...
datetimeoffset
колонка, тогда вам нужно будет посмотреть на часовые пояса, как предложил Кристиан.Если это струна, то вы делаете это неправильно! :)