Sì, SQL Server
arrotonda il tempo a 3.(3)
millisecondi:
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
Come puoi vedere, questi DATETIME
's differiscono di 1
secondo, e le loro rappresentazioni binarie differiscono di 0x12C
, ovvero 300
in decimale.
Questo perché SQL Server
memorizza il time
parte del DATETIME
come numero di 1/300
secondo tick dalla mezzanotte.
Se desideri maggiore precisione, devi memorizzare un TIME
parte come valore separato. Ad esempio, memorizza il tempo arrotondato al secondo come DATETIME
e millisecondi o qualsiasi altra precisione di cui hai bisogno come INTEGER
in un'altra colonna.
Ciò ti consentirà di utilizzare il complesso DATETIME
aritmetica, come aggiungere mesi o trovare giorni della settimana su DATETIME
's e puoi semplicemente aggiungere o sottrarre i millisecondi e concatenare il risultato come .XXXXXX+HH:MM
per ottenere un XML
valido rappresentazione.