Эффективный способ конвертировать секунды в минуты и секунды в SQL Server 2005 - PullRequest
11 голосов
/ 23 февраля 2010

Предположим, у меня есть 90 секунд. Если я хочу отобразить результат в виде минут и секунд, я делаю это с помощью

select Time= '0' + CAST( 90/60 as varchar(2)) + ':' +  CAST( 90%60 as varchar(2)) 

Выход

Время
01: 30

Я добавил 0 (ноль), потому что если вы сделаете select getdate(), результат будет

гггг-мм-дд чч: мм: сс: мс

Каков стандартный способ и рекомендуемая практика для такого преобразования?

Спасибо

Ответы [ 3 ]

27 голосов
/ 23 февраля 2010

с часами:

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
4 голосов
/ 31 августа 2012

Попробуйте это:

select convert(varchar(10), dateadd(second, 15794, 0), 108)
1 голос
/ 23 февраля 2010

Одна из первых вещей, которые я делаю в новой базе данных 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'.

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