Датедифф, когда время пересекает полночь - PullRequest
0 голосов
/ 20 декабря 2011

Любая идея, как построить запрос с датой разницы, который вычисляет время, которое, возможно, пересекает полночь?

Конечно, если это один случай, я бы вычислял отдельно часть до и от полуночи, но мне нужен универсальный запрос, потому чтоУ меня есть тысячи рядов, где некоторые из них пересекают полночь, а некоторые нет, и для каждого из них мне нужно вычислить.datediff (до 10 минут, в этом случае не может пересекать 2 дня).

Ответы [ 3 ]

4 голосов
/ 20 декабря 2011

Функция DATEDIFF обрабатывает оба случая.

SELECT DATEDIFF(MINUTE, '2011-12-20 11:43:00', '2011-12-20 11:50:00')
SELECT DATEDIFF(MINUTE, '2011-12-20 23:59:00', '2011-12-21 00:07:00')
1 голос
/ 27 октября 2018

Предположим, begin_work = 20:00:00Предположим, end_work = 06:00:00ОТВЕТ = 08:00:00

ВЫБРАТЬ *,ДЕЛОКОГДА end_work> begin_workTHEN timediff (end_work, begin_work)ELSE addtime (timediff ('24: 00: 00 ', begin_work), end_work)END AS elapsed_timeFROM my_table

Ограничение - это будет работать только в течение времени, которое не превышает 23 ч 59 м 59 с.Если продолжительность превышает 24 часа, я предлагаю использовать DATEDIFF

Надеюсь, это поможет,Mike

0 голосов
/ 23 мая 2018

Проблема, с которой вы сталкиваетесь, связана с функцией datediff, которая просматривает значения:

declare @start datetime = '2000-01-01 23:59:59.997'
declare @end datetime = '2000-01-02 00:00:01.003'

select datediff(mi,@start,@end) [mins], datediff(ss,@start,@end) [secs]

output:
mins    secs
1       2

select datediff(ss,@start,@end)/60 [mins], datediff(ms,@start,@end)/1000 [secs]

output:
mins    secs
0       1

Минутное значение действительно меняется.Он переносится с 59 до 00, поэтому функция правильно возвращает 1. Чтобы правильно рассчитать истекшее время, я использую секунды, разделенные на 60 для минут, и миллисекунды, разделенные на 1000 для секунд.Это предотвращает пересечение полуночной проблемы.(примечание: 3 миллисекунды - это наименьшая гранулярность времени в SQL Server)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...