对两个日期之间 select 事件的最佳 SQL 查询
Best SQL query to select events between two dates
在阅读了很多关于此的 post 之后。我需要一种在两个日期之间 select 事件的好方法。可能的情况如下图所示:
我的第一次尝试如下:
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
)
问题是查询时间比较长
然后我看到这个 post: Select data from date range between two dates @dmlukichev 谈论排除所有错误的选项:
像这样:
SELECT *
FROM events
WHERE NOT
(
start_date < $start_select
OR
end_date > $end_select
)
但这对我不起作用。
有什么想法吗?
如果我的条件正确,这就是您所需要的。
SELECT * FROM events WHERE (end_date >= $start_select AND start_date <= $end_select);
您将获得开始日期在 $end_select 之前且结束日期在 $start_select.
之后的所有活动
可能有点晚(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
)
在阅读了很多关于此的 post 之后。我需要一种在两个日期之间 select 事件的好方法。可能的情况如下图所示:
我的第一次尝试如下:
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
)
问题是查询时间比较长
然后我看到这个 post: Select data from date range between two dates @dmlukichev 谈论排除所有错误的选项:
像这样:
SELECT *
FROM events
WHERE NOT
(
start_date < $start_select
OR
end_date > $end_select
)
但这对我不起作用。
有什么想法吗?
如果我的条件正确,这就是您所需要的。
SELECT * FROM events WHERE (end_date >= $start_select AND start_date <= $end_select);
您将获得开始日期在 $end_select 之前且结束日期在 $start_select.
之后的所有活动可能有点晚(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
)