Странный предел и поведение (например, последняя цифра, всегда равная 0, 3 или 7) связано с тем, как часть времени внутренне хранится в DATETIME
:
Часть времени сохраняется какколичество тиков с 00:00:00 ( 1 и 2 ).Каждый тик составляет ровно 1/300 th секунды.Имея это в виду, тип DATETIME
может хранить только такие значения, как:
00:00:00.000 -- 0 ticks
00:00:00.003 -- 1 tick, 1/300 = 0.003333 sec
00:00:00.007 -- 2 ticks, 2/300 = 0.006666 sec
00:00:00.010 -- 3 ticks, 3/300 = 0.01 sec
00:00:00.997 -- 299 ticks, 299/300 = 0.996666 sec
00:00:01.000 -- 300 ticks, 300/300 = 1 second
Поскольку невозможно сохранить половину или четверть тиков, DATETIME
не может хранить или представлять значения вмежду.Например, если вы попытаетесь сохранить значение, например CAST('2000-01-01 00:00:00.999' AS DATETIME)
, оно будет округлено до 2000-01-01 00:00:01.000
.