Как получить все даты между двумя датами с каждым часом каждый день? - PullRequest
0 голосов
/ 16 апреля 2019

Я работаю над чем-то, в чем мне нужно получить все даты с часами между двумя датами. Ниже приведен пример того, что я пробовал до сих пор и что на самом деле мне нужно -:

declare @sTime datetime = '03/03/2019 02:00:00.000'
declare @stopTime datetime = '01/01/3000 02:00:00.000'
declare @interval int = 60
declare @temp_time datetime

declare @tempHourtb ( StartTime datetime not null, StopTime datetime 
not null)

select @temp_time = @sTime
while(datediff(hh, @temp_time, @stopTime) > 0)
begin
   insert into @HourTable
   select @temp_time,dateadd(mi, @interval, @temp_time)
   set @temp_time = dateadd(mi, @interval, @temp_time)
end
select * from @tempHourtb

И это дает мне следующий вывод, который является правильным -: enter image description here

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

1 Ответ

2 голосов
/ 16 апреля 2019

Это должно создать 8,597,809 записей всего за 3 секунды

Вы можете переосмыслить год 3000

Declare @Date1 datetime = '2019-03-03 02:00'
Declare @Date2 datetime = '3000-01-01 02:00'

Select StartTime = D
      ,StopTime  = DateAdd(HOUR,1,D)
 Into  #YourTempTable
 From (
        Select Top (DateDiff(HOUR,@Date1,@Date2)+1) 
               D=DateAdd(HOUR,-1+Row_Number() Over (Order By (Select Null)),@Date1) 
         From  master..spt_values n1,master..spt_values n2,master..spt_values n3
      ) A

Что будет выглядеть так

enter image description here

РЕДАКТИРОВАТЬ -

добавлено Into #YourTempTable

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...