2013-03-27 6 views
13

Tôi đang cố gắng tính toán sự khác biệt giữa hai giá trị ngày giờ.Hiển thị dateiff là giây, mili giây

tôi đã cố gắng datediff(s, begin,end)datediff(ms, begin,end) tuy nhiên tôi muốn sự khác biệt để được trả lại như seconds,milliseconds như sau:

4,14 
63,54 

Trả lời

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

Nếu bắt buộc phải tạo nó như một chuỗi trong truy vấn SQL của bạn (có thể không tầng trình bày của bạn làm điều đó), sau đó:?

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

Ngoài ra tôi thực sự hy vọng bạn có tên cột tốt hơn so với beginend.

+1

trình một cách hoàn hảo cảm ơn bạn và có tôi tên cột là khác nhau nó chỉ là để giải thích vấn đề của tôi xin lỗi nếu nó nhầm lẫn bạn. –

4

Thực ra câu trả lời rõ rệt sẽ tạo ra kết quả sai cho mili giây 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 

Đừng quên pad mili giây để ba số không:

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)