Ano, SQL Server
zaokrouhlí čas na 3.(3)
milisekundy:
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
Jak můžete vidět, tyto DATETIME
's se liší o 1
druhé a jejich binární reprezentace se liší o 0x12C
, tedy 300
v desítkové soustavě.
Důvodem je SQL Server
ukládá time
část DATETIME
jako číslo 1/300
druhý tikot od půlnoci.
Pokud chcete větší přesnost, musíte uložit TIME
část jako samostatná hodnota. Například uložte čas zaokrouhlený na sekundy jako DATETIME
, a milisekundy nebo jakoukoli přesnost, kterou potřebujete jako INTEGER
v jiných sloupcích.
To vám umožní používat komplexní DATETIME
aritmetika, jako je přidávání měsíců nebo hledání dnů v týdnu v DATETIME
's a vy můžete jen přidat nebo odečíst milisekundy a zřetězit výsledek jako .XXXXXX+HH:MM
získat platný XML
zastoupení.