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
但是我面临的问题是,当我在开始日期和停止日期之间有很长的差距时,它会花费太多时间。有什么方法可以让我在更短的时间内获得相同的输出?
解决方案
这应该会在 3 秒多的时间内生成8,597,809条记录
您可能需要重新考虑 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
看起来像这样
编辑 -
添加Into #YourTempTable
推荐阅读
- android - 将 Android Context 导入 Kotlin 中的函数文件
- python - 实时更改 Stream.filter 关键字。呸呸呸
- excel - VBA:根据条件选择随机单元格
- c++ - 类外的 static_cast 方法
- c# - EF Core 使用许多用户定义的表类型执行过程
- javascript - Xrm.Navigation.openForm 自动从前一个表单设置查找字段
- assembly - NASM 中的细分市场?
- python - 在 SQL Server 作业中将 BigQuery 连接到 Python
- c - 如何在 EBPF 程序中使用 bpf_probe_read() 复制可变长度数据?
- java - 在清单中添加“tools:node=”replace”这一行后,Firebase crashlytics 未得到报告