SQL服务器:如何判断一个时间段是否在一个时间段内并扣除时间间隔?
SQL Server: How to check a time period whether falls in a period and deduct out the time interval?
大家好。
我的任务是检查时间是否进入休息时间。如果是,我扣掉休息时间。
由于不同时段的休息时间不同,所以我使用 Date X 来检查使用哪个休息时间来计算。
我传入的参数是时间A(2019-11-2810:30:00.000)、时间B(2019-11-2811:30:00.000)和日期X(20191128)
在我的数据库中,有
•Effective From, VARCHAR(YYYYMMDD, 20191127)
•Effective To, VARCHAR(YYYYMMDD, 20191131)
•Break Time 1 Start Time, VARCHAR (HHMMSS, 104500)
•Break Time 1 Duration, INT (30) ... till Break time N.
我没有名为 Break Time n End Time 的列,我需要通过将 Break Time n Duration 添加到 Break Time n Start 来确定自己。
到目前为止我尝试的是
•convert 104500 to 10:45:00 using left, substring and right function
•add 30 minutes using DATEADD(minutes, 30, 10:45:00)
但是 return 是 1990-01-01 11:15:00.000
我无法比较1990-01-01 11:15:00.000
和2019-11-28 10:30:00.000
来检查和计算时间间隔。
有什么克服这个问题的建议吗?非常感谢。
cast
和 time
这样你可以比较一下。
select cast('2019-11-28 10:30:00.000' as time), cast('1990-01-01 11:15:00.000' as time)
输出:
将你的时间添加到约会中。
declare @time varchar(10) ='104500'
select cast(concat(cast('20191127' as date), ' ', left(@time,2)+ ':' + substring(@time,3,2) + ':' + right(@time,2)) as datetime)
大家好。
我的任务是检查时间是否进入休息时间。如果是,我扣掉休息时间。
由于不同时段的休息时间不同,所以我使用 Date X 来检查使用哪个休息时间来计算。
我传入的参数是时间A(2019-11-2810:30:00.000)、时间B(2019-11-2811:30:00.000)和日期X(20191128)
在我的数据库中,有
•Effective From, VARCHAR(YYYYMMDD, 20191127)
•Effective To, VARCHAR(YYYYMMDD, 20191131)
•Break Time 1 Start Time, VARCHAR (HHMMSS, 104500)
•Break Time 1 Duration, INT (30) ... till Break time N.
我没有名为 Break Time n End Time 的列,我需要通过将 Break Time n Duration 添加到 Break Time n Start 来确定自己。
到目前为止我尝试的是
•convert 104500 to 10:45:00 using left, substring and right function
•add 30 minutes using DATEADD(minutes, 30, 10:45:00)
但是 return 是 1990-01-01 11:15:00.000
我无法比较1990-01-01 11:15:00.000
和2019-11-28 10:30:00.000
来检查和计算时间间隔。
有什么克服这个问题的建议吗?非常感谢。
cast
和 time
这样你可以比较一下。
select cast('2019-11-28 10:30:00.000' as time), cast('1990-01-01 11:15:00.000' as time)
输出:
将你的时间添加到约会中。
declare @time varchar(10) ='104500'
select cast(concat(cast('20191127' as date), ' ', left(@time,2)+ ':' + substring(@time,3,2) + ':' + right(@time,2)) as datetime)