我在表格中有多行,每行都包含開始日期和結束日期。用戶每年的每個月都有一個複選框。我需要確定哪些行包含的日期範圍包含用戶選擇的任何月份。MySQL - 查找與月份列表匹配的日期範圍
很容易通過例如MONTH(start_date) IN ($month_list)
檢查結束月份的開始&,但此方法不會匹配兩個日期之間的任何月份。
所以我想我問的是:有沒有一種方式獲得純粹在SQL中的日期範圍的包容性月份?
我在表格中有多行,每行都包含開始日期和結束日期。用戶每年的每個月都有一個複選框。我需要確定哪些行包含的日期範圍包含用戶選擇的任何月份。MySQL - 查找與月份列表匹配的日期範圍
很容易通過例如MONTH(start_date) IN ($month_list)
檢查結束月份的開始&,但此方法不會匹配兩個日期之間的任何月份。
所以我想我問的是:有沒有一種方式獲得純粹在SQL中的日期範圍的包容性月份?
可以這樣的幫助嗎?
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)
你怎麼看,它可以幫助你嗎?
問候
我想你會想包括數據行,其中的日期範圍跨度或相交所選擇的時間 - 在這種情況下,我會推用戶選擇時間到表中,並做了模糊加盟,像.....
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。