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 に答える