Подтвердить что ты не робот

Показывать даты в секундах, миллисекундах

Я пытаюсь вычислить разницу между двумя значениями datetime.

Я пробовал datediff(s, begin,end) и datediff(ms, begin,end), однако я хочу, чтобы разница возвращалась как seconds,milliseconds следующим образом:

4,14
63,54
4b9b3361

Ответ 1

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 ...;

Также я действительно надеюсь, что у вас есть лучшие имена столбцов, чем begin и end.

Ответ 2

На самом деле заметный ответ приведет к неправильным результатам за миллисекунды 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)

Ответ 3

DATEDIFF принимает только два аргумента в MySQL. Это работает для меня:

TIMESTAMPDIFF(SECOND, NOW(), '2019-09-09 18:52:00')