也许你可以替换 :
为.
. 这将为您提供一个可以用PARSENAME解析的字符串(从 SQL Server 2012 开始),然后 CAST 浮动:
DECLARE @SomeTime VARCHAR(100)='69:00:00.0000'
SELECT CAST(PARSENAME(REPLACE(@SomeTime,':','.'),4)/24.00 as float)
或SUBSTRING与CHARINDEX:
SELECT CAST(SUBSTRING(@SomeTime,1,CHARINDEX(':',@SomeTime)-1)/24.00 as float)
输出:
2,875
希望,我的问题是正确的。
编辑
上述方法只使用了几个小时。如果您需要更深入:
DECLARE @SomeTime VARCHAR(100)='69:55:10.999',
@x xml
--Convert to XML
SELECT @x = CAST('<p>'+REPLACE(REPLACE(@SomeTime,':','.'),'.','</p><p>') +'</p>' as xml)
--Working with XML, each part need convertion
SELECT CAST(
t.c.value('/p[1]','int')/24.00+
(t.c.value('/p[2]','int')/60.00)/24.00+
((t.c.value('/p[3]','int')/60.00)/60.00)/24.00+
(((t.c.value('/p[4]','int')/1000.00)/60.00)/60.00)/24.00
as float) result
FROM @x.nodes('/') as t(c)
输出:
2,9133217194375
笔记:
我对 SQL Server 中的数学知之甚少,如果您在当前解决方案中看到任何流程,请报告/建议。