Sqlserver
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Sqlserver

Khắc phục “date không tương thích với int” trong SQL Server khi thêm vào hoặc trừ ngày

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 3 

Trong 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ụng CONVERT() hoặc CAST() :

 DECLARE @date datetime;
SET @date = '2035-10-15';
SELECT CAST(@date + 1 AS date); 

Kết quả:

 2035-10-16 

Giả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 

  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Cách tạo tập lệnh để tạo lại các ràng buộc khóa ngoại trong cơ sở dữ liệu SQL Server - Hướng dẫn sử dụng SQL Server / TSQL Phần 73

  2. Các rủi ro phổ biến của máy chủ SQL

  3. Bộ đệm ẩn đối tượng tạm thời của SQL Server

  4. Chia một cột thành nhiều hàng

  5. SQL Server Standard Edition Tương lai khả dụng cao