2015-06-19 4 views
1

я заметил, что 2 DateTimes считаются равными, если один являетсяSQL Server: сравнение даты и времени, игнорируя несколько миллисекунд

2010-12-31 15:13:48.000 

и другой

2010-12-31 15:13:48.001. 

Я думал в начале, что это было округление вверх или вплоть до ближайших полных секунд, но оказалось

2010-12-31 15:13:48.002 

правильно регистрирует разницу.

Любая идея, почему это происходит?

ответ

5

Тип данных datetime с точностью до 3 миллисекунд (0,0033 секунды), поэтому ваши результаты имеют смысл. Значения: округлены до 0,000, 0,003 и 0,007. Итак, ваш первый пример округляется до: «2010-12-31 15: 13: 48.000», а второй - «2010-12-31 15: 13: 48.003».

Вы можете прочитать об этом в documentation.

+0

Да, совершенно правильно. Вы также можете увидеть это здесь. Https://msdn.microsoft.com/en-us/library/ms187819.aspx – Ionic

+1

Я бы добавил, что datetime2 является более точной (100 наносекунд), поэтому, если нужны миллисекунды, datetime2 является типом данных выбирать. –

0

SQL Server хранит DateTimes к точности 1/300 секунды (~ 3,33 миллисекунды), как stated by the documentation:

ели и данные времени с 1 января 1753 года по 31 декабря 9999, в точность одной трети сотой секунды (эквивалентная 3,33 миллисекунды или 0,00333 секунды). Значения округляются до значений в пределах .000, .003 или .007 секунд, как показано в таблице.

Так что в зависимости от того, где именно происходит округление, временные метки, которые отличаются на три миллисекунды, могут считаться равными.

+0

Блестящий. Спасибо! – user2389805

Смежные вопросы