sql >> Database >  >> RDS >> Sqlserver

Milliseconden fout bij het converteren van XML naar SQL Server datetime

Ja, SQL Server rondt de tijd af op 3.(3) milliseconden:

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

Zoals je kunt zien, zijn deze DATETIME 's verschillen 1 ten tweede, en hun binaire representaties verschillen met 0x12C , dat is 300 in decimalen.

Dit komt omdat SQL Server slaat de time op onderdeel van de DATETIME als een getal van 1/300 seconde tikt vanaf middernacht.

Als u meer precisie wilt, moet u een TIME . opslaan deel als een afzonderlijke waarde. Zoals, bewaar de tijd afgerond op een seconde als een DATETIME , en milliseconden of welke precisie je ook nodig hebt als een INTEGER in andere kolommen.

Hiermee kunt u complexe DATETIME . gebruiken rekenkunde, zoals het toevoegen van maanden of het vinden van weekdagen op DATETIME 's, en je kunt gewoon de milliseconden optellen of aftrekken en het resultaat samenvoegen als .XXXXXX+HH:MM om geldige XML te krijgen vertegenwoordiging.



  1. Datetime-problemen met vb.net en MSSQL

  2. Dubbele gegevenssets ingevoegd in tabel

  3. PostgreSQL vindt gemeenschappelijke combinatie van paren in dezelfde kolom

  4. Tijdstempel binnen transactie instellen