SqlServer获取指定时间内表数据记录

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

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

测试数据表:
测试表

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值