Sqlserver
 sql >> база данни >  >> RDS >> Sqlserver

Милисекунди грешни при конвертиране от XML към SQL Server datetime

Да, SQL Server закръгля времето до 3.(3) милисекунди:

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

Както можете да видите, тези DATETIME се различават с 1 второ, и техните двоични представяния се различават с 0x12C , което е 300 в десетичен знак.

Това е така, защото SQL Server съхранява time част от DATETIME като число от 1/300 втора отметка от полунощ.

Ако искате повече точност, трябва да съхраните TIME част като отделна стойност. Например, съхранявайте времето, закръглено до секунда, като DATETIME и милисекунди или каквато и да е точност, от която се нуждаете като INTEGER в други колони.

Това ще ви позволи да използвате сложни DATETIME аритметика, като добавяне на месеци или намиране на дни от седмицата на DATETIME и можете просто да добавите или извадите милисекундите и да свържете резултата като .XXXXXX+HH:MM за да получите валиден XML представителство.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Как мога да получа списък с имена на елементи от XML стойност в SQL Server

  2. Типът данни „ПАРИ“ на SQL Server е десетична плаваща запетая или двоична плаваща запетая?

  3. Експортирайте таблични данни от един SQL сървър на друг

  4. SQL Server:използвайте параметър в CREATE DATABASE

  5. Как мога да преместя таблица в друга файлова група в MS SQL Server?