Проблема, с которой вы сталкиваетесь, связана с функцией 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)