SQL Server:如何检查时间段是否落入一个时间段并扣除时间间隔?

问题描述 投票:0回答:1

大家好。

我的任务是检查时间是否属于休息时间段。如果是,我会扣除休息时间。

由于不同时段的休息时间不同,所以我确实使用日期X来检查哪个休息时间用于计算。

我传入的参数是时间A(2019-11-28 10:30:00.000),时间B(2019-11-28 11:30:00.000)和日期X(20191128)

在我的数据库中,有

•有效自VARCHAR(YYYYMMDD,20191127)

•有效至,VARCHAR(YYYYMMDD,20191131)

•中断时间1开始时间,VARCHAR(HHMMSS,104500)

•中断时间1持续时间,整数(30)...直到中断时间N。

我没有名为Break Time n End Time的列,我需要通过将Break Time n Duration添加到Break Time n Start来确定自己。

到目前为止,我尝试过的是

•使用left,substring和right函数将104500转换为10:45:00

•使用DATEADD添加30分钟(分钟,30、10:45:00)

但是返回值为1990-01-01 11:15:00.000

我无法比较1990-01-01 11:15:00.0002019-11-28 10:30:00.000来检查和计算时间间隔。

有什么建议可以克服这个问题?真的很感谢。

sql-server datetime time dateadd
1个回答
0
投票

[cast等于time,因此您可以进行比较。

select cast('2019-11-28 10:30:00.000' as time), cast('1990-01-01 11:15:00.000' as time)

输出:

enter image description here

将您的时间添加到约会中。

declare @time varchar(10) ='104500' 
select cast(concat(cast('20191127' as date), ' ', left(@time,2)+ ':' + substring(@time,3,2) + ':' + right(@time,2)) as datetime)
© www.soinside.com 2019 - 2024. All rights reserved.