|
質問分類が「.NET 全般」のままになっていましたよ。
■No95297 (ファイター さん) に返信 > int で与えられている ミリ秒データを > 時:分:秒.ミリ秒 > の形式にするにはどうすればよいのでしょうか?
int の範囲は、-2,147,483,648 〜 2,147,483,647 ですね。
マイナス方向の時間を考慮するかどうかでも変わりますが、 0 以上のみを扱うとすると、最大値は 24日20時間31分23秒647 になりますね。
「時:分:秒.ミリ秒」ではなく、全角コロンな 「時:分:秒.ミリ秒」となっていますが、これは意図的な物でしょうか? 下記では無視していますが、必要であれば最後に REPLACE を挟んでみてください。
-- とりあえず最大値でテスト DECLARE @msec INT = 2147483647;
-- 適当な日付からの経過ミリ秒数を得る DECLARE @time DATETIME2 = DATEADD(millisecond, @msec, CONVERT(DATETIME2, ' 2000/01/01 0:00:00.000'));
-- 変換例 DECLARE @timeTEXT VARCHAR(15) = CONVERT(VARCHAR(3), @msec / (60 * 60 * 1000)) -- 24時間超過対策 + SUBSTRING(CONVERT(NVARCHAR(13), @time, 114), 3, 10); -- HH 部を捨てて、:mm:ss.fff 部を切り出す
-- 結果確認 SELECT @timeTEXT; -- 596:31:23:647
|