Mostrar o datediff como segundos, milisegundos

Estou a tentar calcular a diferença entre dois valores datetime.

tentei datediff(s, begin,end) e datediff(ms, begin,end) no entanto, quero que a diferença seja devolvida como seconds,milliseconds como o seguinte:

4,14
63,54
Author: Aaron Bertrand, 2013-03-27

2 answers

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

Se você absolutamente precisa formá-lo como uma string em sua consulta SQL (sua camada de apresentação não pode fazer isso?), então:

SELECT 
  CONVERT(VARCHAR(12),  DATEDIFF(MILLISECOND, begin, end) / 1000)
  + ',' 
  + RIGHT('000' + CONVERT(VARCHAR(4), DATEDIFF(MILLISECOND, begin, end) % 1000), 3)
FROM ...;
Também espero que tenhas melhores nomes de colunas do que begin e end.
 24
Author: Aaron Bertrand, 2016-12-15 20:10:18

Na verdade, a resposta marcada produzirá resultados errados durante milisegundos 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
Não te esqueças de colocar os milissegundos em três zeros.
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)
 4
Author: Wolfgang, 2015-07-03 07:40:00