Nếu bạn nhận được thông báo lỗi “Msg 206” có nội dung “Loại toán hạng clash:date không tương thích với int” trong SQL Server trong khi cố gắng thêm vào (hoặc trừ từ) một ngày, có thể là do bạn đang cố thực hiện phép số học giữa một số nguyên integer
và một date
giá trị.
Để khắc phục sự cố này, hãy thay đổi date
giá trị thành một datetime
giá trị hoặc sử dụng DATEADD()
chức năng.
Ví dụ về lỗi
Dưới đây là một ví dụ về mã tạo ra lỗi:
DECLARE @date date;
SET @date = '2035-10-15';
SELECT @date + 1;
Kết quả:
Msg 206, Cấp độ 16, Trạng thái 2, Dòng 3Trong trường hợp này, tôi đã khai báo một biến dưới dạng giá trị ngày tháng, được gán một giá trị, sau đó tôi cố gắng thêm một số nguyên vào ngày đó.
Giải pháp 1
Một cách để khắc phục sự cố này là sử dụng
datetime
giá trị thay vìdate
giá trị:DECLARE @date datetime; SET @date = '2035-10-15'; SELECT @date + 1;
Kết quả:
2035-10-16 00:00:00.000Điều này rõ ràng có tác dụng bao gồm một giá trị thời gian (có thể không cần thiết). Chúng tôi có thể chuyển đổi kết quả trở lại
date
giá trị sử dụngCONVERT()
hoặcCAST()
:DECLARE @date datetime; SET @date = '2035-10-15'; SELECT CAST(@date + 1 AS date);
Kết quả:
2035-10-16Giải pháp 2
Một cách khác để khắc phục sự cố này là sử dụng
DATEADD()
hàm để thực hiện số học:DECLARE @date date; SET @date = '2035-10-15'; SELECT DATEADD(day, 1, @date);
Kết quả:
2035-10-16