sql >> Database teknologi >  >> RDS >> Sqlserver

Millisekunder forkert ved konvertering fra XML til SQL Server datetime

Ja, SQL Server runder tiden til 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, er disse DATETIME 's adskiller sig med 1 sekund, og deres binære repræsentationer adskiller sig med 0x12C , det vil sige 300 i decimal.

Dette er fordi SQL Server gemmer time del af DATETIME som et tal på 1/300 andet kryds fra midnat.

Hvis du ønsker mere præcision, skal du gemme en TIME del som en separat værdi. Gem tid afrundet til et sekund som en DATETIME , og millisekunder eller hvilken præcision du har brug for som INTEGER i en anden kolonne.

Dette vil lade dig bruge kompleks DATETIME aritmetik, som f.eks. at tilføje måneder eller finde ugedage på DATETIME 's, og du kan bare tilføje eller trække millisekunderne og sammenkæde resultatet som .XXXXXX+HH:MM for at få gyldig XML repræsentation.



  1. Sådan opretter du en trigger for sletning af php myadmin

  2. Test af en GeoDjango app med en PostGIS database

  3. JDBC ResultSet:Jeg har brug for en getDateTime, men der er kun getDate og getTimeStamp

  4. Mysql Search Behandl perioder som mellemrum