Câu trả lời:
Không có sự khác biệt thực sự ở đó, nhưng khi bạn bắt đầu sử dụng DATETIME2
các giá trị hoặc các hàm trả về DATETIME2
giá trị, bạn sẽ gặp lỗi.
SELECT SYSDATETIME() - 1 AS [Incompatible]
Msg 206, Cấp 16, Trạng thái 2, Dòng 17 Kiểu va chạm: datetime2 không tương thích với int
Đối với những điều này, bạn phải sử dụng các hàm toán học ngày.
SELECT DATEADD(DAY, -1, SYSDATETIME()) AS [Compatible]
Aaron Bertrand nói ngắn gọn về vấn đề này trong loạt bài Bad Habits to Kick .
Trái với tuyên bố trong một trong những câu trả lời khác, cả hai tùy chọn đều được SQL Server hỗ trợ và ghi lại chính thức : datetime - number
đó không phải là hành vi không xác định.
Lợi thế lớn của
DATEADD(d, -2, GETUTCDATE())
là thực tế nó là tài liệu tự : Mục đích của nó là rõ ràng ngay lập tức.
GETUTCDATE() - 2
mặt khác, phụ thuộc vào người đọc biết định nghĩa của datetime - number
hoạt động. Đúng, hiện tại nó có thể là T-SQL thành ngữ, nhưng thực tế là điều này không còn được hỗ trợ cho datetime2
ngụ ý rằng các thế hệ nhà phát triển SQL Server trong tương lai có thể không còn quen thuộc với nó nữa.
date
Đã được thêm vào). Nó hơi lộn xộn.