0

我有一张桌子working_hours time(0)lunch_hours time(0) 我要做的是:

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

例子:

lounch_hour = 01:30:00 => offset = 00:30:00

完成后,我必须从working_hours值中减去偏移量

例子:

offset = 00:30:00, working_hours = 07:30:00 => working_hours = 07:00:00

结果必须是time(0)格式 ( hh:mm:ss) 我尝试了几种解决方案但仍然无法正常工作。使用DATEDIFF过的可能没有以正确的方式使用。

谢谢你的帮助

4

1 回答 1

1

您正在使用 TIME 来存储持续时间,它们并没有真正的可比性,并且可能会出现卡住的情况,主要的例子是当您使用时间格式的持续时间超过 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);

基本上以分钟为单位计算允许的午餐时间和实际午餐时间之间的差异,然后将这些分钟添加到工作时间。

于 2013-06-25T10:19:26.723 回答