2013-03-27 12 views
13

Sto provando a calcolare la differenza tra due valori datetime.Show datediff come secondi, millisecondi

ho cercato datediff(s, begin,end) e datediff(ms, begin,end) però voglio la differenza da restituire come seconds,milliseconds come la seguente:

4,14 
63,54 

risposta

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

Se è assolutamente necessario formare come una stringa nella query SQL (non può il vostro livello di presentazione farlo), allora:?

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

Inoltre spero davvero di avere i nomi delle colonne meglio di begin e end.

+1

funziona perfettamente grazie e sì il mio i nomi delle colonne sono diversi, era solo per spiegare il mio problema scusa se ti ha confuso. –

4

In realtà la risposta marcata produrrà risultati errati per millisecondi 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 

Non dimenticare di pad i millisecondi a tre zeri:

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)