При поиске метода для создания диапазонов дат я столкнулся с проблемой следующего запроса:
DECLARE @StartDate DateTime = '2000-01-01 01:00';
DECLARE @EndDate DateTime = '2020-01-01 00:00';
with Dates as (
select
@StartDate fromDate
UNION ALL
(Select
fromDate = dateadd(day, 1, @EndDate)
from
Dates
where
fromDate >= @StartDate AND
fromDate < @EndDate ))
Select * from Dates
OPTION (MAXRECURSION 0);
Следующий запрос возвращает две строки, одна из которых выходит за пределы диапазона,
fromDate
-----------------------
2000-01-01 01:00:00.000
2020-01-02 00:00:00.000
Мне известно, что существует способ решить эту проблему, изменив вторую половину запроса, например:
Select * from Dates Where fromDate <= @EndDate
У меня есть следующие вопросы:
- что не так с запросом как есть?
- Почему этот запрос возвращает два значения, одно из которых лежит за пределами указанного диапазона?
Это использует Microsoft SQL Server 2008 R2