Tôi đã có một truy vấn như vậy với một ứng dụng lịch mà tôi đã từng viết. Tôi nghĩ rằng tôi đã sử dụng một cái gì đó như thế này:
... WHERE new_start < existing_end
AND new_end > existing_start;
CẬP NHẬT Điều này chắc chắn sẽ hoạt động ((ns, ne, es, ee) =(new_start, new_end, current_start, current_end)):
- ns - ne - es - ee:không chồng chéo và không khớp (vì ne
- ns - es - ne - ee:chồng chéo và trùng khớp
- es - ns - ee - ne:chồng chéo và khớp
- es - ee - ns - ne:không trùng lặp và không khớp (vì ns> ee)
- es - ns - ne - ee:chồng chéo và khớp nhau
- ns - es - ee - ne:chồng chéo và khớp nhau
Đây là fiddle