2013-06-25 4 views
0

Я за столом с working_hourstime(0), lunch_hourstime(0) Что я должен сделать, это следующее:SQL Server 2008 - разница между временем (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

Вы используете 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); 

В принципе вычислить разницу между разрешенным ланчем и фактическим обедом в течение нескольких минут, а затем добавить в этих минутах на рабочее время.

+0

Спасибо! Он отлично работает! – lugeno