Oracle - 不在多行之间的日期

时间:2012-08-03 08:29:15

标签: sql oracle date

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

2 个答案:

答案 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