Ja, SQL Server
runder tiden til 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, er disse DATETIME
's adskiller sig med 1
sekund, og deres binære repræsentationer adskiller sig med 0x12C
, det vil sige 300
i decimal.
Dette er fordi SQL Server
gemmer time
del af DATETIME
som et tal på 1/300
andet kryds fra midnat.
Hvis du ønsker mere præcision, skal du gemme en TIME
del som en separat værdi. Gem tid afrundet til et sekund som en DATETIME
, og millisekunder eller hvilken præcision du har brug for som INTEGER
i en anden kolonne.
Dette vil lade dig bruge kompleks DATETIME
aritmetik, som f.eks. at tilføje måneder eller finde ugedage på DATETIME
's, og du kan bare tilføje eller trække millisekunderne og sammenkæde resultatet som .XXXXXX+HH:MM
for at få gyldig XML
repræsentation.