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.