背景:有一个根据开始时间和结束时间生成的履历表,现想获取每小时内有哪些数据
方案:由于开始时间和结束时间持续可能超过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
测试数据表:

文章讨论了一个如何从含有开始时间和结束时间的履历表中,按小时提取数据的SQL解决方案。它涉及到了对开始时间在查询范围内和不在范围内的两种情况进行处理,以及使用DATEDIFF函数和DATEADD函数来计算和调整时间。提供的测试数据表进一步说明了查询的实现。
4916

被折叠的 条评论
为什么被折叠?



