SQL Server 2008-时间差(0)

SQL Server 2008-时间差(0),sql,time,subtraction,Sql,Time,Subtraction,我有一张有工作时间时间(0),午餐时间时间(0) 我要做的是: 如果午餐时间大于一小时,我必须计算偏移量 例如: lounch_hour = 01:30:00 => offset = 00:30:00 offset = 00:30:00, working_hours = 07:30:00 => working_hours = 07:00:00 完成后,我必须从工作时间值中减去偏移量 例如: lounch_hour = 01:30:00 => offset = 00:30:0

我有一张有
工作时间
时间(0)
午餐时间
时间(0)
我要做的是:

如果午餐时间大于一小时,我必须计算偏移量

例如:

lounch_hour = 01:30:00 => offset = 00:30:00
offset = 00:30:00, working_hours = 07:30:00 => working_hours = 07:00:00
完成后,我必须从
工作时间
值中减去偏移量

例如:

lounch_hour = 01:30:00 => offset = 00:30:00
offset = 00:30:00, working_hours = 07:30:00 => working_hours = 07:00:00
结果必须是时间(0)
格式(
hh:mm:ss
) 我尝试了几种解决方案,但仍然不起作用。使用的
DATEDIFF
可能没有以正确的方式使用


感谢您提供的帮助

您正在使用时间来存储持续时间,它们实际上并不具有可比性,并且可能会出现不稳定的情况,这方面的主要示例是,当使用时间格式的持续时间超过24小时时,最好以十进制秒(或分钟或小时)存储持续时间,然后,您可以在sql中或在应用程序层中使用各种方法将其转换为
HH:mm:ss
格式

但是,对于您的具体场景,您可以使用:

DECLARE @WorkingHours TIME(0) = '07:00',
        @LunchHours TIME(0) = '01:30';

SELECT  Total = DATEADD(MINUTE, DATEDIFF(MINUTE, @LunchHours, '01:00'), @WorkingHours);
基本上计算允许的午餐时间和实际午餐时间之间的差异(以分钟为单位),然后将这些分钟添加到工作时间中