Я должен хранить некоторые интервалы в mssql db. Я знаю, что точность даты и времени составляет ок. 3,3 мс (может заканчиваться только 0, 3 и 7).
Но когда я вычисляю интервалы между датами, я вижу, что результат может заканчиваться только 0, 3 и 6. Так что чем больше интервалов я суммирую, тем большую точность я теряю. Можно ли получить точный DATEDIFF в миллисекундах?
declare @StartDate datetime
declare @EndDate datetime
set @StartDate='2010-04-01 12:00:00.000'
set @EndDate='2010-04-01 12:00:00.007'
SELECT DATEDIFF(millisecond, @StartDate, @EndDate),@EndDate-@StartDate, @StartDate, @EndDate
Хотелось бы увидеть 7, а не 6. (И это должно быть как можно быстрее)
** Обновление **
Я вижу значения DATEDIFF, заканчивающиеся не только 0, 3, 6, но и 4, 7 (могут быть и другие), но дело в том, что они все еще неточны. Решение, предложенное Алексом, работает. То же самое может быть достигнуто, если вы не хотите помнить правильный формат даты и времени с:
SELECT DATEDIFF(SECOND, @StartDate, @EndDate)*1000 + DATEPART(MILLISECOND , @EndDate) - DATEPART(MILLISECOND , @StartDate)
Мне все еще интересно, почему DATEDIFF(millisecond, @StartDate, @EndDate)
неточен?