我有一张包含开始日期和结束日期的表格。我想确保没有新日期与开始日期和结束日期之间定义的任何时间段重叠。有任何想法吗 ?
问问题
1086 次
2 回答
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)以避免竞争条件。
于 2012-08-03T08:33:27.897 回答
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
于 2012-08-03T08:48:35.877 回答