背景:有一个根据开始时间和结束时间生成的履历表,现想获取每小时内有哪些数据
方案:由于开始时间和结束时间持续可能超过1小时,所以需获取开始时间在需获取范围内的和开始时间不在需获取时间范围内的两种情况下的数据
参考SQL:
declare @A time(7),@B time(7),@C time(7),@D int /声明变量/
set @A=‘16:00:00’/要查询的时间段结束时间,此处是指15:00-16:00/
set @B=‘01:00:00’
set @C=convert(time(7),dateadd(HOUR,datediff(HH,@B,@A),2023))/要查询的时间段开始时间/
set @D=datediff(HH,@B,@A)/参数D限制后续循环次数/
select * from [TST].[dbo].[T1] where starttime between convert(time(7),dateadd(HOUR,datediff(HH,@B,@A),1)) and @A
while @@rowcount=0 and @D>-1
begin
set @A=convert(time(7),dateadd(HOUR,datediff(HH,@B,@A),1))
set @D=datediff(HH,@B,@A)
select * from [TST].[dbo].[T1] where datediff(SS,@C,endtime)>0 and starttime between convert(time(7),dateadd(HOUR,datediff(HH,@B,@A),1)) and @A
end
测试数据表: