本質上,我希望等同於.NET的TimeSpan.TotalMilliseconds
,但對於SQLServer中的TIME數據類型。我已經能夠得到的最好的是:如何從TIME值中獲取總毫秒數
DATEDIFF(ms, CONVERT(DATE, CONVERT(DATETIME2, value)), CONVERT(DATETIME2, value))
但是,這是超詳細和非常不明顯。是否有一個更簡潔/內置的方式來做到這一點?
本質上,我希望等同於.NET的TimeSpan.TotalMilliseconds
,但對於SQLServer中的TIME數據類型。我已經能夠得到的最好的是:如何從TIME值中獲取總毫秒數
DATEDIFF(ms, CONVERT(DATE, CONVERT(DATETIME2, value)), CONVERT(DATETIME2, value))
但是,這是超詳細和非常不明顯。是否有一個更簡潔/內置的方式來做到這一點?
除非我在你的問題中遺漏了一些東西,否則你根本就不需要做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)
@ChaseMedallion那是什麼?它甚至是有效的SQL?它共有5個括號 – Cato
@ChaseMedallion DateAdd需要3個參數,而不是2個。而DateAdd從來沒有出現在原始問題中。 –
對於那些將來運行這個答案的人來說,使用這個匹配我的問題的表達式是'DATEDIFF(ms,CONVERT(TIME,'00:00:00'),value)' – ChaseMedallion
不幸的是,SQL Server的'time'數據類型是用來固定*時間*,而不是*時間跨度*。如果您嘗試使用它來保持時間跨度,您通常會遇到導致問題的尷尬邊緣情況(不支持否定性,超過24小時的值,以及例如添加)。我通常會推薦*在SQL Server中將時間跨度數據存儲爲'int',並在列名稱中使用哪些單位(例如'elapsedTimeMs'),而不是試圖將其放入'time'中柱。 –