Sqlserver
 sql >> Teknologi Basis Data >  >> RDS >> Sqlserver

Milidetik salah saat mengonversi dari XML ke SQL Server datetime

Ya, SQL Server membulatkan waktu ke 3.(3) milidetik:

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

Seperti yang Anda lihat, DATETIME 's berbeda dengan 1 kedua, dan representasi binernya berbeda dengan 0x12C , yaitu 300 dalam desimal.

Ini karena SQL Server menyimpan time bagian dari DATETIME sebagai nomor 1/300 kutu kedua dari tengah malam.

Jika Anda ingin lebih presisi, Anda perlu menyimpan TIME bagian sebagai nilai tersendiri. Seperti, waktu penyimpanan dibulatkan menjadi satu detik sebagai DATETIME , dan milidetik atau presisi apa pun yang Anda butuhkan sebagai INTEGER di kolom lain.

Ini akan memungkinkan Anda menggunakan DATETIME yang kompleks aritmatika, seperti menambahkan bulan atau menemukan hari minggu pada DATETIME 's, dan Anda cukup menambah atau mengurangi milidetik dan menggabungkan hasilnya sebagai .XXXXXX+HH:MM untuk mendapatkan XML yang valid representasi.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Apa yang terjadi pada ID kunci utama ketika melewati batas?

  2. Bagaimana Anda menyalin catatan dalam tabel SQL tetapi menukar id unik dari baris baru?

  3. Kesalahan Basis Data:Tidak ada baris di posisi 0

  4. SQL Server 2008 - Pencarian/Penyortiran Lanjutan

  5. Pulihkan cadangan SQL Server 2000 di SQL Server 2012