MySQL - 查找与月份列表匹配的日期范围
问题描述:
我在表格中有多行,每行都包含开始日期和结束日期。用户每年的每个月都有一个复选框。我需要确定哪些行包含的日期范围包含用户选择的任何月份。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。