SQL Server: как отформатировать временной интервал? - PullRequest
2 голосов
/ 13 февраля 2012

Я хочу отформатировать интервал времени как «99d 99h 99m».См., Например, следующий SQL:

-- 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. Есть ли какой-нибудь умный способ сделать это?

Ответы [ 3 ]

2 голосов
/ 13 февраля 2012
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 '..

2 голосов
/ 13 февраля 2012
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 голосов
/ 13 февраля 2012

сначала получите минуты между временным интервалом, для которого вы должны найти интервал в формате 99d 99h 99m. Я просто жестко запрограммировал ошибки, поэтому ваш запрос будет:

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'
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...