Oui, SQL Server
arrondit le temps à 3.(3)
millisecondes :
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
Comme vous pouvez le voir, ces DATETIME
diffèrent de 1
seconde, et leurs représentations binaires diffèrent de 0x12C
, soit 300
en décimal.
C'est parce que SQL Server
stocke l'time
partie du DATETIME
sous la forme d'un nombre de 1/300
secondes à partir de minuit.
Si vous voulez plus de précision, vous devez stocker un TIME
partie en tant que valeur distincte. Par exemple, stocker l'heure arrondie à la seconde sous forme de DATETIME
, et millisecondes ou toute autre précision dont vous avez besoin en tant que INTEGER
dans une autre colonne.
Cela vous permettra d'utiliser des DATETIME
complexes l'arithmétique, comme l'ajout de mois ou la recherche de jours de la semaine sur DATETIME
's, et vous pouvez simplement ajouter ou soustraire les millisecondes et concaténer le résultat sous la forme .XXXXXX+HH:MM
pour obtenir un XML
valide représentation.