ranio Ответов: 1

Как избежать проблемы фильтрации дат в 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 колонка, тогда вам нужно будет посмотреть на часовые пояса, как предложил Кристиан.

Если это струна, то вы делаете это неправильно! :)

1 Ответов

Рейтинг:
0

Christian Graus

Если вы получаете данные с другой даты, чем та, что указана в вашем запросе, я бы предположил, что ваша проблема связана с часовыми поясами. Где-то происходит преобразование часового пояса в указанную вами дату, перемещая ее на день назад