2010-06-08 78 views
1

我有一個專門聲明爲int(稱爲HourMil)的列,它將時間存儲在military format中。我需要這個值轉換爲字符串格式化(HH:MM)將軍事時間轉換爲字符串表示

例如

HourMil = 710 -> must be 07:10 
HourMil = 1305 -> must be 13:05 

其實我使用此代碼(與工作正常)的列HourMil轉換爲字符串表示。

SELECT SUBSTRING(LEFT('0',4-LEN(CAST(HourMil AS VARCHAR)))+CAST(HourMil AS VARCHAR),1,2)+':'+SUBSTRING(LEFT('0',4-LEN(CAST(HourMil AS VARCHAR)))+CAST(HourMil AS VARCHAR),3,2) FROM MYTABLE 

但我認爲這個代碼可以改進。

+0

什麼版本的SQL Server? – 2010-06-08 22:11:12

+0

事實上,這種「軍事」格式(24小時制)是世界上絕大多數人使用的 - 「除美國外的所有人」,爲什麼不把它稱爲「國際」或「標準「 時間 ?? – 2010-06-09 05:10:23

回答

1

通過創建一個日期,然後將其格式化:

SELECT SUBSTRING(CONVERT(nvarchar, DATEADD 
    (hh, HourMil/100, DATEADD(mi, HourMil % 100, '1900-01-01')), 8), 0, 6) 
+0

+1非常好的解決方案,非常感謝。 – RRUZ 2010-06-08 22:26:12

0

方程:

H = HourMil/100; 
M = HourMil - (HourMil/100) * 100; 

工作的例子:

H = 710/100 = 7 
M = 710 - (710/100) * 100 = 10 

H = 1305/100 = 13 
M = 1305 - (1305/100) * 100 = 5 

注:所有/*運營商MUST下只有小數工作。 (整數)

那麼你的SQL將是:

CONCAT(CAST(H AS VARCHAR(8)), ':', CAST(M AS VARCHAR(8))); 

等式最終似乎是:

CONCAT(CAST((HourMil/100) AS VARCHAR(8)), ':', CAST((HourMil - (HourMil/100) * 100) AS VARCHAR(8))); 
0

這是另一種方法,也是最短的一種

select stuff(right('0'+ltrim(hourmail),4),3,0,':') from 
(
select 710 as hourmail union all 
select 1305 
) as t 
相關問題