2011-01-11 74 views
4

內的日期範圍中選擇行我有賬戶的一個表,有開始日期和結束日期列。我希望用戶提供開始日期和結束日期,並且必須在用戶指定的開始日期和結束日期之間的任何時間返回帳戶處於活動狀態的所有數據。與另一個日期範圍

美中不足的是,結束日期可能爲空,如果這個帳戶仍在當前活動。

的帳戶,如果它是在用戶指定的範圍之間的任何時間,這意味着,即使是進行了範圍之間打開或關閉帳戶必須包含開放必須被選擇。

這裏是我想要的圖片。

alt text

黃色部分是由用戶輸入的時間範圍。綠色部分是我想要的選擇。淡紅色的部分是我不想要的東西。 G,H和I末尾的箭頭表示這些帳戶沒有結束日期。所有其他沒有箭頭的人都有結束日期。

回答

4

所以,這相當於檢查帳戶起始日期是之前用戶提供的結束日期和賬戶結束日期爲用戶提供起始日期後(或爲空,在這種情況下,我們甚至都不需要檢查):

where 
    account.start_date < @user_end_date and 
    (account.end_date >= @user_start_date or account.end_date is null) 
0
SELECT * 
FROM accounts 
WHERE start_date <= @input_end_date 
     AND (end_date >= @input_start_date OR (end_date IS NULL AND NOW() >= @input_start_date)) 
1
SELECT 
    * 
FROM 
    accounts 
WHERE 
    (start_date >= :user_supplied_start AND start_date <= :user_supplied_end) 
OR 
    (end_date >= :user_supplied_end AND end_date <= :user_supplied_start) 
OR 
    (start_date <= :user_supplied_start AND end_date IS NULL)