sql >> Databasteknik >  >> RDS >> Sqlserver

Millisekunder fel vid konvertering från XML till SQL Server datumtid

Ja, SQL Server avrundar tiden till 3.(3) millisekunder:

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

Som du kan se är dessa DATETIME s skiljer sig med 1 andra, och deras binära representationer skiljer sig med 0x12C , det vill säga 300 i decimal.

Detta beror på att SQL Server lagrar time del av DATETIME som ett antal 1/300 andra tick från midnatt.

Om du vill ha mer precision måste du lagra en TIME del som ett separat värde. Som, lagra tid avrundad till en sekund som en DATETIME , och millisekunder eller vilken precision du behöver som ett INTEGER i en annan kolumn.

Detta låter dig använda komplex DATETIME aritmetik, som att lägga till månader eller hitta veckodagar på DATETIME s, och du kan bara lägga till eller subtrahera millisekunderna och sammanfoga resultatet som .XXXXXX+HH:MM för att få giltig XML representation.



  1. asp classic hur man fäller fel när man ansluter till en oracle-länkad server

  2. Hibernate Formula Annotation - MySql-funktioner:INTERVAL, DAY

  3. hur man sorterar ordning på LEFT JOIN i SQL-fråga?

  4. Hur kan jag hitta tabeller som refererar till en viss rad via en främmande nyckel?