2013-03-27 172 views
13

我試圖計算兩個日期時間值之間的差異。以秒,毫秒顯示datediff

我試圖datediff(s, begin,end)datediff(ms, begin,end)但是我想的差異返回爲seconds,milliseconds類似如下:

4,14 
63,54 

回答

22
SELECT 
    DATEDIFF(MILLISECOND, begin, end)/1000, 
    DATEDIFF(MILLISECOND, begin, end) % 1000 
FROM ...; 

如果你絕對必須形成它作爲您的SQL查詢字符串(不能你的表現層這樣做),則:

SELECT 
    CONVERT(VARCHAR(12), DATEDIFF(MILLISECOND, begin, end)/1000) 
    + ',' 
    + RIGHT('000' + CONVERT(VARCHAR(4), DATEDIFF(MILLISECOND, begin, end) % 1000), 3) 
FROM ...; 

而且我真的希望你有更好的列名比beginend

+1

完美的作品感謝你和我是列名是不同的,它只是爲了解釋我的問題,抱歉,如果它讓你困惑。 – 2013-03-27 14:06:52

4

其實明顯的答案會產生錯誤的結果爲毫秒1 - 99:

Example 1 second, 27 milliseconds: 
1) DATEDIFF % 1000 will return 27 
2) CONVERT will convert to '27' 
3) String concatenation will build '1' + ',' + '27' 
4) Result: '1.27' which means 270ms rather than 27ms 

不要忘記墊毫秒到三個零:

DECLARE @start datetime2(7) = '2015-07-03 09:24:33.000' 
DECLARE @end datetime2(7) = '2015-07-03 09:24:34.027' 

SELECT 
    CAST (DATEDIFF(SECOND, @start, @end) AS nvarchar(3)) + N'.' + 
    RIGHT('000' + CAST((DATEDIFF(MILLISECOND, @start, @end) % 1000) AS nvarchar(3)), 3)