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

Ràng buộc kiểm tra chồng chéo phạm vi ngày

KIỂM TRA đang được thực hiện sau khi hàng đã được chèn, do đó, phạm vi trùng lặp với chính nó.

Bạn sẽ cần sửa đổi WHERE của mình để bao gồm một số thứ như:@MyTableId <> MyTableId .

BTW, biểu thức WHERE của bạn có thể được đơn giản hóa.

Phạm vi không chồng chéo nếu:

  • kết thúc của một phạm vi trước khi bắt đầu phạm vi khác
  • hoặc bắt đầu của một phạm vi là sau khi kết thúc của phạm vi khác.

Có thể viết bằng SQL như:

WHERE @DateEnd < DateStart OR DateEnd < @DateStart

Phủ nhận điều đó để nhận được các phạm vi làm chồng chéo ...

WHERE NOT (@DateEnd < DateStart OR DateEnd < @DateStart)

... mà theo luật của De Morgan cũng giống như ...

WHERE NOT (@DateEnd < DateStart) AND NOT (DateEnd < @DateStart)

... giống như:

WHERE @DateEnd >= DateStart AND DateEnd >= @DateStart

Vì vậy, WHERE cuối cùng của bạn phải là:

WHERE
    @MyTableId <> MyTableId
    AND @DateEnd >= DateStart
    AND DateEnd >= @DateStart

[SQL Fiddle]

LƯU Ý:để cho phép các dải ô "chạm", hãy sử dụng <= trong biểu thức bắt đầu, sẽ tạo ra > trong biểu thức cuối cùng.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Hàm trong SQL Server 2008 tương tự như hàm GREATEST trong mysql?

  2. SCOPE_IDENTITY () cho GUID?

  3. 2 cách lấy ngôn ngữ mặc định của đăng nhập trong SQL Server (T-SQL)

  4. Bảng Tally để chèn các ngày còn thiếu giữa hai ngày? SQL

  5. Chuyển đổi 'datetime' thành 'time' trong SQL Server (Ví dụ T-SQL)