我有包含以下数据的表
id 开始日期 结束日期 1 2018-01-01 2018-01-15 2 2018-01-11 2018-01-16 3 2018-01-03 2018-02-10 4 2018-01-01 2018-03-15
我想根据月份列出事件。如果我在 2018-01,它会给出正确的结果,但是当我在 2018-02 时,它不会给我条目 4,它在 2018-01-01 到 2018-03-15 之间传播
SELECT * FROM `table` `t`
WHERE (start_date >='2018-01-01' AND start_date <='2018-01-31')
OR (end_date >= '2018-01-01' AND end_date <='2018-01-31')
任何帮助
通过获取范围的第一个月和最后一个月来使用 BETWEEN 怎么样:
由于这不会使用索引,因此替代方法是使用生成的列:
那么查询就会变成下面这样,并使用start_end_month索引:
要检查 start_date..end_date 是否“重叠”'2018-01-01'..'2018-01-31',只需要进行两次比较: