2010-12-02 140 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。