我有一个声明为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 :(得分: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