Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/81.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在SQL Server中将4位整数值转换为时间值_Sql_Sql Server - Fatal编程技术网

如何在SQL Server中将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

我有一个4位整数的小时值表。我需要将小时值转换为时间格式,如下所示:

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-SQL
FORMAT
函数:
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, ':')