Формат даты в SQL [ч]: мм: сс, как в Excel, за пределами 24 ч
В Excel есть перевод для встроенного формата даты [h]:mm:ss
в T-SQL или любой платформе SQL?
пример:
General [h]:mm:ss [mm]:ss [ss]
1.00000 24:00:00 1440:00 86400
1.00000 24:00:00 1440:00 86400
SUM
2.00000 48:00:00 2880:00 172800
Для T-SQL я выберу
Without century (yy) (1) With century (yyyy) Standard Input/Output (3)
14 114 - hh:mi:ss:mmm(24h)
Или по умолчанию 108, я понимаю, нужно ли мне воссоздать функцию, которая может сделать hh:mi:ss:mmm
(+ 24 часа)?
Комментарии очень приветствуются;
1 ответ
В то время как SQL Server time
тип данных должен отображаться на тип данных CLR на временной шкале, он поддерживает только интервалы менее 24 часов.
SQL Server datediff
Это также сложно, когда дело доходит до вычисления интервала, поскольку он вычисляет границы части даты, пересекаемой между двумя датами. Например, это должен быть интервал в 1 секунду, но datediff сообщит вам, что это час, если вы спросите часы:
select datediff(hh, '2013-01-01T23:59:59', '2013-01-02T00:00:00')
-- Returns 1
Таким образом, вам может потребоваться развернуть собственную функцию, когда дело доходит до этого, хотя, надеюсь, этот ответ поможет вам начать:
-- Setup test data
declare @minDate datetime = '2012-12-12 20:16:47.160'
declare @maxDate datetime = '2012-12-17 15:10:12.050'
-- Get timespan in hh:mi:ss
select cast(
(cast(cast(@maxDate as float) - cast(@minDate as float) as int) * 24) /* hours over 24 */
+ datepart(hh, @maxDate - @minDate) /* hours */
as varchar(10))
+ ':' + right('0' + cast(datepart(mi, @maxDate - @minDate) as varchar(2)), 2) /* minutes */
+ ':' + right('0' + cast(datepart(ss, @maxDate - @minDate) as varchar(2)), 2) /* seconds */
-- Returns 114:53:24