Да, 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
представителство.