MySQL - 查找与月份列表匹配的日期范围

时间:2010-12-02 09:57:51

标签: mysql date range

我在表格中有几行,每行包含开始日期和结束日期。用户具有一年中每个月的复选框。我需要确定哪些行包含的日期范围包括用户选择的任何月份。

检查开始和放大很容易例如,MONTH(start_date) IN ($month_list)结束月份,但这种方法与两个日期之间的任何月份都不匹配。

所以我想我要问的是:有没有办法从纯粹用SQL的日期范围中获得包容性月份?

2 个答案:

答案 0 :(得分: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)

您怎么看?它对您有帮助吗?

问候

答案 1 :(得分: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表应该在start_date和end_date上有一个索引,对于a_table应该类似。