2011-11-16 41 views
12

Trong SQL Server 2008, tại sao các truy vấn sau trả về cùng một giá trị?SQL Server 2008 và mili giây

-- These all return 2011-01-01 23:59:59.997 
SELECT CAST('2011-01-01 23:59:59.997' as datetime) 
SELECT CAST('2011-01-01 23:59:59.998' as datetime) 

Và tại sao truy vấn sau đây lại đến ngày tiếp theo?

-- Returns 2011-01-02 00:00:00.000 
SELECT CAST('2011-01-01 23:59:59.999' as datetime) 

Trả lời

25

Độ chính xác của DateTime trong SQL Server luôn là 1/300 giây (3.33ms), vì vậy mọi giá trị không chia đều được làm tròn chính xác.

  • 997 ở lại vì nó là
  • 998 sẽ tròn đến 997
  • 999 sẽ làm tròn lên đến 000

Để có được độ chính xác bổ sung, có kiểu dữ liệu DateTime2, có sẵn trong SQL Server 2008 trở đi, có thể chính xác đến 7 chữ số thập phân.

+0

Điều cần biết ... cảm ơn phản hồi nhanh chóng! –

3

Các tài liệu MSDN cho datetime tại http://msdn.microsoft.com/en-us/library/ms187819.aspx nói

Phạm vi thời gian == 0:00:00 qua 23: 59: 59,997 Độ chính xác == Tròn để gia của 0,000, 0,003, hoặc 0,007 giây

Trong tài liệu được liên kết, cũng có phần "Làm tròn số nguyên ngày thứ hai".

datetime2 cung cấp cho bạn độ chính xác cao hơn.

Các vấn đề liên quan