Ja, SQL Server
rundet die Zeit auf 3.(3)
Millisekunden:
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
Wie Sie sehen können, sind diese DATETIME
unterscheiden sich durch 1
zweitens, und ihre binären Darstellungen unterscheiden sich durch 0x12C
, also 300
in Dezimalzahl.
Dies liegt daran, dass SQL Server
speichert die time
Teil von DATETIME
als Zahl von 1/300
Sekunde tickt ab Mitternacht.
Wenn Sie mehr Genauigkeit wünschen, müssen Sie eine TIME
speichern Teil als separater Wert. Speichern Sie beispielsweise die auf eine Sekunde gerundete Zeit als DATETIME
, und Millisekunden oder was auch immer Sie für eine Genauigkeit als INTEGER
benötigen in anderen Spalten.
Dadurch können Sie den komplexen DATETIME
verwenden Arithmetik, wie das Addieren von Monaten oder das Finden von Wochentagen auf DATETIME
's, und Sie können einfach die Millisekunden addieren oder subtrahieren und das Ergebnis als .XXXXXX+HH:MM
verketten gültiges XML
zu erhalten Vertretung.