#sql #sql_server
Есть запрос: 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
Ответы
Ответ 1
С помощью функции 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.
Комментариев нет:
Отправить комментарий