Есть запрос:
declare
@StartDate DateTime='2016-01-01',
@EndDate DateTime='2016-02-29'
BEGIN
SET NOCOUNT ON;
select id, ModifiedAt
From Deals
Where ModifiedAt between @StartDate and @EndDate
END
Как сделать при интервалах даты '2016-01-01' по '2016-02-29' запрос выполнялся по 2016-01-01 по 2016-03-01?
То есть нужно в Where добавить условия +1 Day
Ответ
С помощью функции dateadd
Where ModifiedAt between @StartDate and dateadd(day, 1, @EndDate)
Можно добавлять день, час, месяц, год, неделю и т.п. - это задаётся первым параметром. Второй параметр - сколько соответствующих интервалов добавить. Последний - то к чему добавлять. Замечу, что можно добавлять отрицательные величины.
Вижу, у вас это в процедуре с параметром, иногда удобнее прибавлять день к параметру перед вызовом процедуры (например, если происходит вызов из внешнего приложения), оставив в ней:
Where ModifiedAt between @StartDate and @EndDate
но, это конечно - как вам удобнее.
Да, и, для дат часто делают проверку интервала с нижней границей включённой, а верхней - исключенной, чтобы если сделка совершена ровно в промежутке, она не попадала в два интервала одновременно:
Where ModifiedAt >= @StartDate and ModifiedAt < @EndDate
T.е. если у нас допустим @StartDate = 2016-01-01 a @EndDate = 2016-03-01, то возьмутся записи с 2016-01-01 00:00:00.000 примерно по 2016-02-29 23:59:59
Комментариев нет:
Отправить комментарий