如何用SQL的CONVERT()函数获取HH:MM:SS.nnn格式的时间?
解决方案:自定义时间差格式为HH:MM:SS.nnn
SQL Server没有直接返回HH:MM:SS.nnn格式的内置转换代码(格式114返回的是HH:MM:SS:nnn),可以通过以下两种方式实现需求:
方法1:替换格式114的毫秒分隔符
利用格式114先获取带毫秒的时间字符串,再把秒和毫秒之间的冒号替换为英文句点:
REPLACE( CONVERT(NVARCHAR(16), DATEADD(MILLISECOND, ISNULL(DATEDIFF(MILLISECOND, T.IssueDatetime, T.CalledDateTime), 0), 0), 114), ':', '.', 2 )
这里指定替换第2个冒号(前两个冒号是时分、分秒的分隔符),能精准定位到秒与毫秒之间的分隔符,避免误替换。
方法2:拆分时间部分拼接(更稳妥)
分别提取时分秒部分和毫秒部分,再用英文句点拼接,避免字符串替换可能带来的歧义:
CONCAT( -- 获取HH:MM:SS部分 CONVERT(NVARCHAR(8), DATEADD(MILLISECOND, ISNULL(DATEDIFF(MILLISECOND, T.IssueDatetime, T.CalledDateTime), 0), 0), 108), '.', -- 获取3位毫秒(补前导零确保格式统一) RIGHT('000' + CAST(ISNULL(DATEDIFF(MILLISECOND, T.IssueDatetime, T.CalledDateTime), 0) % 1000 AS NVARCHAR(3)), 3) )
解释:通过取时间差毫秒数的余数,得到0-999的毫秒值,再用RIGHT('000' + ..., 3)确保始终显示3位数字(如5毫秒会显示为005)。
内容的提问来源于stack exchange,提问作者Amir Shouqqie
相关产品推荐
相关产品推荐

