SQL Server 2008 - 时间差(0)

时间:2013-06-25 10:00:39

标签: sql time subtraction

我的桌子上有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可能没有以正确的方式使用。

感谢您的帮助

1 个答案:

答案 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);

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