Ja, SQL Server
avrundar tiden till 3.(3)
millisekunder:
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
Som du kan se är dessa DATETIME
s skiljer sig med 1
andra, och deras binära representationer skiljer sig med 0x12C
, det vill säga 300
i decimal.
Detta beror på att SQL Server
lagrar time
del av DATETIME
som ett antal 1/300
andra tick från midnatt.
Om du vill ha mer precision måste du lagra en TIME
del som ett separat värde. Som, lagra tid avrundad till en sekund som en DATETIME
, och millisekunder eller vilken precision du behöver som ett INTEGER
i en annan kolumn.
Detta låter dig använda komplex DATETIME
aritmetik, som att lägga till månader eller hitta veckodagar på DATETIME
s, och du kan bara lägga till eller subtrahera millisekunderna och sammanfoga resultatet som .XXXXXX+HH:MM
för att få giltig XML
representation.