如何每天获取两个日期之间的所有日期?

时间:2019-04-16 19:43:01

标签: sql-server

我正在做一些需要获取所有日期且两个日期之间有小时的事情。下面是到目前为止我尝试过的示例以及我实际上需要的示例-

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

但是我面临的问题是,当我在开始和结束日期之间有很长的间隔时,它花费了太多时间。 有什么方法可以在短时间内获得相同的输出?

2 个答案:

答案 0 :(得分:2)

这应该会在3秒钟内生成 8,597,809 条记录

您可能需要重新考虑3000年

Mult(4, 2)

看起来像这样

enter image description here

编辑-

添加了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

答案 1 :(得分:0)

此解决方案大约需要一分钟才能插入8577500条记录 :

var vmin = document.getElementById("smin").value; 
var vmax = document.getElementById("smax").value; 

if(vmin == 15 && vmax == 20)
    {
     document.getElementById("text").innerHTML = 99;
    }
if(vmin == 15 && vmax == 19)
    {
     document.getElementById("text").innerHTML = 7;
    }