Здесь я иду к таблице подсчета или чисел.Это идеально подходит для такого рода вещей.Я веду учетную таблицу в своей системе в таком виде.
create View [dbo].[cteTally] as
WITH
E1(N) AS (select 1 from (values (1),(1),(1),(1),(1),(1),(1),(1),(1),(1))dt(n)),
E2(N) AS (SELECT 1 FROM E1 a, E1 b), --10E+2 or 100 rows
E4(N) AS (SELECT 1 FROM E2 a, E2 b), --10E+4 or 10,000 rows max
cteTally(N) AS
(
SELECT ROW_NUMBER() OVER (ORDER BY (SELECT NULL)) FROM E4
)
select N from cteTally
GO
Теперь у вас есть возможность мгновенно запросить до 10 000 последовательных чисел.Но как мы используем это для такого вопроса, как ваш?
declare @StartDate datetime = '20180501'
, @EndDate datetime = '20180520'
select dateadd(day, t.N - 1, @StartDate)
from cteTally t
where t.N <= datediff(day, @StartDate, @EndDate) + 1
order by t.N
- РЕДАКТИРОВАТЬ - Не совсем понятно, хотите ли вы часы или дни.Но если вам нужны часы, просто измените функцию DATEDIFF на час вместо дня.