我的桌子上有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
可能没有以正确的方式使用。
感谢您的帮助
答案 0 :(得分: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);
基本上计算允许午餐时间与实际午餐时间之间的差异(以分钟为单位),然后将这些分钟数添加到工作时间。