вызов tsql DATEDIFF в минутах без округления секунд

Я делаю вызов DATEDIFF() в SQL Server 2008 как часть хранимой процедуры, которая потенциально возвращает значения всего за 3 секунды или меньше. Я хотел бы, чтобы формат был в формате MM:SS (т.е. 00:03, когда 3 секунды). Первоначально я использовал вызов в минутах:

DATEDIFF(mi, SELECT MAX(startDate) FROM myTable , SELECT MAX(EndDate) FROM myTable)

Однако это округляло до ближайшей минуты и, таким образом, стирало значения секунд. Как я могу получить формат, указанный выше, с помощью DATEDIFF?


person Christian    schedule 17.12.2012    source источник


Ответы (1)


С точностью до секунды:

DATEDIFF(ss, SELECT MAX(startDate) FROM myTable, SELECT MAX(EndDate) FROM myTable)

Ссылка.

Примечание: DATEDIFF не даст вам «формат». Он просто возвращает целое число. Поэтому вам нужно будет правильно отлить / отформатировать.

Я подозреваю, что самое близкое, что вы легко получите, это использовать CAST с форматом 108:

select convert(char(8), dateadd(ss, DATEDIFF(ss, SELECT MAX(startDate) FROM myTable, 
                                                 SELECT MAX(EndDate) FROM myTable)), 
               cast(0 as DateTime)) , 108)

e.g.

select convert(char(8), dateadd(ss, DATEDIFF(ss, '2012-12-16 12:00:00', 
                                                 '2012-12-16 12:13:09'), 
                                cast(0 as DateTime)), 108)

возвращает:

00:13:09

[Примечание: если вы хотите округлить до ближайших 3 секунд, вы можете изменить это: TSQL: округление до ближайшего 15-минутного интервала ]

person Mitch Wheat    schedule 17.12.2012