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