2012-02-13 2 views
2

Я хочу отформатировать временной интервал как '99d 99h 99m'. Пожалуйста, обратитесь к следующей SQL, например:SQL Server: как отформатировать временной интервал?

-- 1501 minutes should be '1d 1h 1m' (= 1 day + 1 hour + 1 minute) 
select datediff(mi, '02-21-2012 00:00', '02-22-2012 01:01') 

Мой РСУБД SQL Server 2005. Есть ли умный способ сделать это?

ответ

2
select CAST(datediff(dd, '02-21-2012 00:00', '02-22-2012 01:01') AS VARCHAR(12))+'d '+ 
CAST(datediff(hh, '02-21-2012 00:00', '02-22-2012 01:01')%24 AS VARCHAR(2))+'h '+ 
CAST(datediff(n, '02-21-2012 00:00', '02-22-2012 01:01')%60 AS VARCHAR(2))+'m' 

Если вы хотите иметь ведущие нули, вы должны использовать RIGHT в дополнение к CAST. Я оставил это, чтобы сделать запрос более удобным для чтения.

+0

Спасибо, что сработало для меня. Но вторая строка не должна быть «d», а «h». Я попытался отредактировать, но не смог сэкономить, потому что мне пришлось по крайней мере 6 символов. –

+0

Ах, вы правы (глупая ошибка копирования/вставки). Я починил это. –

2
SELECT [day] = Datediff(dd, st, et), 
     [hour] = Datediff(hh, st, et) % 24, 
     [minute] = Datediff(n, st, et) % 60 
FROM (SELECT st = CONVERT(DATETIME, '02-21-2012 00:00'), 
       et = CONVERT(DATETIME, '02-22-2012 01:01')) tbl 

Я просто не люблю вход '02 -21-2012 00:00' много раз ..

0

сначала получить минуты между интервалом времени, в течение которого вы должны найти интервал в 99D 99h 99m. я просто hardcoding mintues, так что ваш запрос будет:

declare @minutes int = 5690 

select cast(@minutes/(24*60) as varchar(10))+'d '+cast((@minutes%(24*60))/60 as varchar(10))+'h '+cast((@minutes%(24*60))%60 as varchar(10))+'m' 
Смежные вопросы