2012-02-22 39 views
6

Trong MSDN nói rõ rằng:"Thêm giá trị vào cột 'datetime' đã gây tràn."

The date argument cannot be incremented to a value outside the range of its data type. In the following statements, the number value that is added to the date value exceeds the range of the date data type. The following error message is returned: "Adding a value to a 'datetime' column caused overflow."

Và ví dụ:

SELECT DATEADD(year,2147483647, '2006-07-31'); 
SELECT DATEADD(year,-2147483647, '2006-07-31'); 

mà gây ra lỗi:

"Adding a value to a 'datetime' column caused overflow."

này có vẻ đúng. Nhưng tại sao tôi nhận được thông báo lỗi tương tự thực hiện câu lệnh SQL này:

SELECT DATEDIFF(YY,'1013-12-12',DATEADD(YY,-300,getdate())) 

cụ thể hơn và chỉ:

SELECT DATEADD(YY,-300,getdate()) 
+2

Tối thiểu 'datetime' là 1753 [bởi vì đó là năm sau khi nước Anh sử dụng Lịch Gregory] (http://stackoverflow.com/questions/3310569/what-is-the-significance-of-1-1- 1753-in-sql-server/3310588 # 3310588) Bạn đang sử dụng phiên bản SQL Server nào? –

+1

@Joro - Well 'SELECT DATEADD (YY, -300, cast (getdate() là datetime2))' sẽ làm việc cho bạn sau đó. –

+0

@MartinSmith Có, bạn đã đúng. Tôi đã kiểm tra này và 'datetime2' và 'datetimeoffset' hỗ trợ định dạng ngày từ tháng 1.0001 đến 31 tháng 12 9999. Các câu lệnh SQL cho đến bây giờ có nghĩa là, kiểu mặc định của hàm getdate() là 'datetime' và tại sao nếu nó được nói rằng 'datetime' và 'smalldatetime' được khấu hao. – gotqn

Trả lời

9

First google result for 'sql datetime range'. 1 tháng 1 năm 1753. Đó là giới hạn dưới của bạn.

Nhận xét về câu hỏi được thêm this trivia về nguồn gốc của giới hạn dưới này.

+0

Tuyệt. Cảm ơn bạn đã trả lời, nhưng nó là một loại buồn. Ví dụ: nếu ai đó lưu trữ thông tin lịch sử trong cơ sở dữ liệu của anh ấy trước năm nay, anh ấy sẽ không thể sử dụng một số chức năng được tích hợp sẵn ... – gotqn

1

Nếu bạn thực hiện chuyển đổi DateTime với trường sử dụng câu lệnh trường hợp trong chuyển đổi để kiểm tra xem trường có lớn hơn 1 HOẶC 1000000 thì bạn không nên gặp sự cố này nữa.

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