我正在做一些需要获取所有日期且两个日期之间有小时的事情。下面是到目前为止我尝试过的示例以及我实际上需要的示例-
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
但是我面临的问题是,当我在开始和结束日期之间有很长的间隔时,它花费了太多时间。 有什么方法可以在短时间内获得相同的输出?
答案 0 :(得分:2)
这应该会在3秒钟内生成 8,597,809 条记录
您可能需要重新考虑3000年
Mult(4, 2)
看起来像这样
编辑-
添加了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;
}