Ответ 1
С часами:
SELECT CONVERT(CHAR(8),DATEADD(second,90,0),108)
00:01:30
Игнорирование часов:
SELECT RIGHT(CONVERT(CHAR(8),DATEADD(second,90,0),108),5)
01:30
Предположим, что у меня есть 90 секунд. Если я хочу отобразить результат в минутах и секунду, я делаю это с помощью
select Time= '0' + CAST( 90/60 as varchar(2)) + ':' + CAST( 90%60 as varchar(2))
Выходной сигнал
Время
1:30
Я добавил 0 (ноль), потому что если вы делаете select getdate()
, вывод будет
yyyy-mm-dd hh: mm: ss: ms
Каков стандартный способ и рекомендуемая практика для такого преобразования?
Спасибо
С часами:
SELECT CONVERT(CHAR(8),DATEADD(second,90,0),108)
00:01:30
Игнорирование часов:
SELECT RIGHT(CONVERT(CHAR(8),DATEADD(second,90,0),108),5)
01:30
Попробуйте следующее:
select convert(varchar(10), dateadd(second, 15794, 0), 108)
Одна из первых вещей, которые я делаю в новой базе данных SQL, добавляет функцию Timespan
, подобную этой (хотя я имею тенденцию включать дни и миллисекунды):
CREATE FUNCTION dbo.TimeSpan
(
@Hours int,
@Minutes int,
@Seconds int
)
RETURNS datetime
AS BEGIN
RETURN DATEADD(SS, @Hours * 3600 + @Minutes * 60 + @Seconds, 0)
END
Затем вы можете отформатировать это, как хотите:
SELECT SUBSTRING(CONVERT(char(8), dbo.TimeSpan(0, 0, 90), 108), 4, 5)
Сначала это может выглядеть сложнее, но возможность повторного использования функции Timespan
очень удобна с течением времени. Для меня это похоже на хак, чтобы всегда писать призывы DATEADD
против 0
или '1753-01-01'
.