将军事时间转换为字符串表示

时间:2010-06-08 22:08:54

标签: sql sql-server sql-server-2005

我有一个声明为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

但我认为这段代码可以改进。

3 个答案:

答案 0 :(得分:1)

创建日期,然后格式化:

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

答案 1 :(得分: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

注意:所有 / * 运算符必须仅在十进制数下工作。 (整数)的

然后你将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)));

答案 2 :(得分:0)

这是另一种方法,也是最短的方法

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