2016-10-18 28 views
1

本質上,我希望等同於.NET的TimeSpan.TotalMilliseconds,但對於SQLServer中的TIME數據類型。我已經能夠得到的最好的是:如何從TIME值中獲取總毫秒數

DATEDIFF(ms, CONVERT(DATE, CONVERT(DATETIME2, value)), CONVERT(DATETIME2, value)) 

但是,這是超詳細和非常不明顯。是否有一個更簡潔/內置的方式來做到這一點?

+0

不幸的是,SQL Server的'time'數據類型是用來固定*時間*,而不是*時間跨度*。如果您嘗試使用它來保持時間跨度,您通常會遇到導致問題的尷尬邊緣情況(不支持否定性,超過24小時的值,以及例如添加)。我通常會推薦*在SQL Server中將時間跨度數據存儲爲'int',並在列名稱中使用哪些單位(例如'elapsedTimeMs'),而不是試圖將其放入'time'中柱。 –

回答

8

除非我在你的問題中遺漏了一些東西,否則你根本就不需要做CONVERT。該DATEDIFF()功能支持TIME數據類型:

Declare @T1 Time = '01:00:00', 
     @T2 Time = '01:00:01' 

Select DateDiff(Millisecond, @T1, @T2) 
Declare @T1 Time = '01:00:00.000', 
     @T2 Time = '01:00:00.123' 

Select DateDiff(Millisecond, @T1, @T2) 
+0

@ChaseMedallion那是什麼?它甚至是有效的SQL?它共有5個括號 – Cato

+0

@ChaseMedallion DateAdd需要3個參數,而不是2個。而DateAdd從來沒有出現在原始問題中。 –

+0

對於那些將來運行這個答案的人來說,使用這個匹配我的問題的表達式是'DATEDIFF(ms,CONVERT(TIME,'00:00:00'),value)' – ChaseMedallion