sql >> Databáze >  >> RDS >> Sqlserver

Chybné milisekundy při převodu z XML na SQL Server datetime

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í.



  1. výhoda použití spouštěče k naplnění náhradního klíče v oracle plsql

  2. získání velkých dat json ze serveru pomocí knihovny php volley trvá příliš dlouho

  3. PHP MYSQL Associate pole a tabulka

  4. obnovit materialized view periodically postgres