2012-02-13 13 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') 

私のRDBMSが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' 

あなたが先頭にゼロを持っているしたい場合は、CASTに加えてRIGHTを使用する必要があります。クエリを読みやすくするためにこれを残しました。

+0

ありがとう、それは私のために働いた。しかし、2行目は「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午後12時00' 分に何度も好まない。..

0

まずあなたが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' 
関連する問題