我有一张包含开始和结束日期的表格。我想确保没有新日期与开始日期和结束日期之间定义的任何期间重叠。有什么想法吗?
答案 0 :(得分:1)
您可以在插入之前检查该新日期的现有行:
SELECT COUNT(*) FROM THE_TABLE
WHERE (
? BETWEEN START_DATE AND END_DATE
OR
? BETWEEN START_DATE AND END_DATE
OR
START_DATE BETWEEN ? AND ?
) AND ROWNUM<2
(其中?是要测试的新时期的开始和结束日期。)
您可能需要同步它(例如使用LOCK TABLE)以避免竞争条件。
答案 1 :(得分:0)
除了Thilo所说的,还必须处理以下内容
SELECT COUNT(*) FROM THE_TABLE
WHERE (
DATE_1 BETWEEN START_DATE AND END_DATE
OR
DATE_2 BETWEEN START_DATE AND END_DATE
OR
START_DATE BETWEEN DATE_1 AND DATE_2
OR
END_DATE BETWEEN DATE_1 AND DATE_2
)
AND ROWNUM<2