如何在SQL Server中将4位整数值转换为时间值
我有一个4位整数的小时值表。我需要将小时值转换为时间格式,如下所示:如何在SQL Server中将4位整数值转换为时间值,sql,sql-server,Sql,Sql Server,我有一个4位整数的小时值表。我需要将小时值转换为时间格式,如下所示: val and what I want is -> hour ------------------------------------- 942 9:42 1928 19:28 1017 10:17 2031 2
val and what I want is -> hour
-------------------------------------
942 9:42
1928 19:28
1017 10:17
2031 20:31
SQL Server中的时间有秒组件以及小时和分钟(或小时和分钟和秒)。您可以使用
timefromparts()
转换为时间:
如果只需要HHMM部分,可以转换回字符串:
select convert(varchar(5), timefromparts(val / 100, v % 100, 0, 0, 0))
或者,您可以只使用字符串操作:
select stuff(right( concat('00', val), 4), 3, 0, ':')
是一个dbfiddle。
TIMEFROMPARTS(值/100,值%100,0,0)
。还有其他方法可以将时间
格式化为字符串,但理想情况下应留给客户机。输入是否受到适当限制,以不提供错误的数字(即大于2359的值,在6-9
中有最后一位数字的任何值)?如果没有,我们应该如何处理这些输入?我同意@JeroenMostert的观点,格式化应该在表示层进行。扩展示例,可以使用T-SQLFORMAT
函数:FORMAT(DATETIMEFROMPARTS(1900,1,1,val/100,val%100,0,0),'hh:mm tt')如果其输入为NULL
,则code>TIMEFROMPARTS
将返回NULL
,因此这不会是问题所在。如果您需要NULL
最终以其他形式结束,请使用ISNULL
/COALESCE
。如果您需要一些未经处理的非法值NULL
,请使用NULLIF
/CASE
(例如NULLIF(value,'NULL')
将字符串'NULL'
转换为正确的NULL
)。@Jeroenmoster:似乎您已经找到了答案,为什么不这样发布呢?stirng类型很有用,因为我的数据库中有2400个时间,这会出错。。谢谢大家!@阿米罗塞纳拉吉。您可能应该将这些值存储为十进制小时,而不是time
或字符串。
select stuff(right( concat('00', val), 4), 3, 0, ':')