Да, SQL Server
время округления до 3.(3)
миллисекунд:
SELECT CAST(CAST('2009-01-01 00:00:00.000' AS DATETIME) AS BINARY(8))
SELECT CAST(CAST('2009-01-01 00:00:01.000' AS DATETIME) AS BINARY(8))
0x00009B8400000000
0x00009B840000012C
Как видите, эти DATETIME
отличаются на 1
секунду, а их двоичные представления отличаются на 0x12C
, то есть 300
в десятичном виде.
Это потому, что SQL Server
хранит time
часть DATETIME
в виде числа 1/300
секундных тиков с полуночи.
Если вы хотите большей точности, вам нужно сохранить деталь TIME
как отдельное значение. Например, храните время, округленное до секунды, как DATETIME
, и миллисекунды или любую другую точность, которая вам нужна как INTEGER
, в других столбцах.
Это позволит вам использовать сложную DATETIME
арифметику, такую как добавление месяцев или поиск дней недели по DATETIME
, и вы можете просто добавить или вычесть миллисекунды и объединить результат как .XXXXXX+HH:MM
, чтобы получить действительный XML
представление.