2012-08-03 44 views
0

我有一個包含開始日期和結束日期的表格。我想確保沒有新的日期會與開始和結束日期之間定義的任何時段重疊。有任何想法嗎 ?Oracle - 不在多行之間的日期

回答

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)來避免競爭條件。

+0

這看起來不錯..但一個之情況仍然會無法處理......想象的是,在表8月1日和31日之間的時期如果在8月1日至9月30日之間的新日期被輸入,則採用8月,但在實際發生錯誤時應該視爲有效。 – cgval 2012-08-03 08:45:00

+0

正確。爲此增加了另一個案例。請檢查。 – Thilo 2012-08-03 08:49:03

0

而且什麼蒂洛說,下面還必須處理

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 
+0

我在想第四個條款是多餘的。 – Thilo 2012-08-03 09:10:43

相關問題