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.