Có, SQL Server
thời gian làm tròn thành 3.(3)
mili giây:
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
Như bạn thấy, DATETIME
này khác nhau bởi 1
thứ hai, và các đại diện nhị phân của chúng khác nhau 0x12C
, đó là 300
ở dạng thập phân.
Điều này là do SQL Server
lưu trữ time
một phần của DATETIME
dưới dạng một số 1/300
tích tắc thứ hai từ nửa đêm.
Nếu bạn muốn chính xác hơn, bạn cần lưu trữ TIME
một phần như một giá trị riêng biệt. Giống như, thời gian lưu trữ được làm tròn đến một giây dưới dạng DATETIME
và mili giây hoặc bất kỳ độ chính xác nào bạn cần làm INTEGER
trong các cột khác.
Điều này sẽ cho phép bạn sử dụng DATETIME
phức tạp số học, như thêm tháng hoặc tìm ngày trong tuần vào DATETIME
và bạn chỉ có thể thêm hoặc bớt phần nghìn giây và nối kết quả dưới dạng .XXXXXX+HH:MM
để lấy XML
hợp lệ đại diện.