Sim,
SQL Server
arredonda o tempo para 3.(3)
milissegundos: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
Como você pode ver, estes
DATETIME
's diferem em 1
segundo, e suas representações binárias diferem em 0x12C
, que é 300
em decimal. Isso ocorre porque o
SQL Server
armazena a time
parte do DATETIME
como um número de 1/300
segundos da meia-noite. Se você quiser mais precisão, você precisa armazenar um
TIME
parte como um valor separado. Por exemplo, armazene o tempo arredondado para um segundo como um DATETIME
, e milissegundos ou qualquer precisão que você precise como um INTEGER
em outras colunas. Isso permitirá que você use
DATETIME
complexo aritmética, como adicionar meses ou encontrar dias da semana em DATETIME
's, e você pode apenas adicionar ou subtrair os milissegundos e concatenar o resultado como .XXXXXX+HH:MM
para obter um XML
válido representação.