2010-12-02 63 views
1

我在表格中有多行,每行都包含開始日期和結束日期。用戶每年的每個月都有一個複選框。我需要確定哪些行包含的日期範圍包含用戶選擇的任何月份。MySQL - 查找與月份列表匹配的日期範圍

很容易通過例如MONTH(start_date) IN ($month_list)檢查結束月份的開始&,但此方法不會匹配兩個日期之間的任何月份。

所以我想我問的是:有沒有一種方式獲得純粹在SQL中的日期範圍的包容性月份?

回答

0

可以這樣的幫助嗎?

WHERE 
    MONTH(start_date) < MONTH_YOU_ARE_CHECKING and 
    MONTH() > MONTH_YOU_ARE_CHECKING 

如果您需要檢查一次全部,你可以做所有月份的列表,從列表中刪除後,該月用戶選擇和比較對列表之後。這將是一個僞代碼示例所示:)

MONTHS = 1,2,3,4,5,6,7,8,9,10,11,12 
USER_SELECTED_MONTHS= 1,6,8,9,12 
LIST_TO CHECK = 2,3,4,5,7,10,11 

這麼好,現在你可以這樣做:

MONTH(start_date) NOT IN (2,3,4,5,7,10,11) 

你怎麼看,它可以幫助你嗎?

問候

0

我想你會想包括數據行,其中的日期範圍跨度或相交所選擇的時間 - 在這種情況下,我會推用戶選擇時間到表中,並做了模糊加盟,像.....

SELECT DISTINCT at.* 
FROM a_table at, user_periods up 
WHERE at.start_date<=up.end_date 
AND at.end_date>=up.start_date 
AND up.trans_id=$SOME_VAR 

(在TRANS_ID只允許表用於多個操作)

要在這裏儘量減少努力,user_periods表應該有起始日期日期和結束日期索引,和a_ta類似BLE。