0

我有一张包含开始日期和结束日期的表格。我想确保没有新日期与开始日期和结束日期之间定义的任何时间段重叠。有任何想法吗 ?

4

2 回答 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 回答