用于在两个日期之间选择事件的最佳SQL查询

时间:2015-10-19 08:39:33

标签: mysql sql date datetime

阅读了很多关于此的帖子。我需要一个很好的方法来选择两个日期之间的事件。可能的条件如下图所示:

Date range for events

我的第一次尝试如下:

SELECT *
FROM events
WHERE 
(
 start_date BETWEEN $start_select AND  $end_select
 OR
 end_date BETWEEN $start_select AND $end_select
)
OR
(
 start_date <=  $start_select
 AND
 end_date >= $end_select
)

问题是进行查询需要很长时间。

然后我看到这篇文章:Select data from date range between two dates @dmlukichev谈到排除所有错误的选项:

这样的事情:

SELECT *
FROM events
WHERE NOT 
(
 start_date <  $start_select
 OR
 end_date > $end_select
)

但这对我不起作用。

有什么想法吗?

2 个答案:

答案 0 :(得分:7)

如果我的条件正确,这就是你所需要的。

SELECT * FROM events WHERE (end_date >=  $start_select AND start_date <= $end_select);

您将获得开始日期在$ end_select之前且结束日期在$ start_select之后的所有事件。

答案 1 :(得分:0)

可能会晚一点(到4年),但我使用:

SELECT * FROM events WHERE  (end_date > $start_select AND start_date BETWEEN $start_select AND $end_select
    OR start_date < $end_select AND end_date BETWEEN $start_select AND $end_select
    OR (start_date < $start_select AND end_date > $end_select) BETWEEN $start_select AND $end_select
    )