【发布时间】:2021-02-01 21:39:31
【问题描述】:
上下文
我已经用表格建模了一个日历。条目是日历的事件:
id ; event_start_date ; event_end_date.
一个条目是:
11 ; 2021-01-28 15:15:37 ; 2022-01-11 15:15:37
我编写的脚本接受日期的搜索间隔作为条目,并应返回搜索间隔内包含的所有事件(如果搜索间隔包含在事件间隔中,或者如果搜索间隔日期之一包含在事件间隔中,或者如果事件间隔包含在搜索间隔中)。 我认为不应该返回结果的(唯一)情况是:如果搜索间隔完全超出所有事件的范围。
搜索、预期和实际行为示例
考虑以下搜索间隔:search_start_date = 2021-01-26 00:00:00 和 search_end_date = 2021-01-30 00:00:00。
预期行为:应该返回事件 #11,因为即使 search_start_date 超出了事件的间隔,search_end_date 也在其中。
实际行为:不返回任何事件。
脚本
使用的 SGBD:MySQL。使用的语言:SQL。
select *, @search_start_date:="2021-01-26 00:00:00", @search_end_date:="2021-01-30 00:00:00"
from `calendars_events`
where
(@search_start_date between `event_start_date` and `event_end_date`) or (@search_end_date between `event_start_date` and `event_end_date`)
or
(`event_start_date` between @search_start_date and @search_end_date) or (`event_end_date` between @search_start_date and @search_end_date)
问题
为什么没有返回事件?我认为我正确使用了 MySQL 变量,并且我认为我可以使用 between 进行日期比较。
【问题讨论】:
-
令人困惑...为什么没有
event_start_date或类似的`?你怎么知道活动什么时候开始?为什么搜索会混合搜索记录的创建时间戳和事件的时间段? -
event_start_date是event_creation_date:-) -
好的,然后命名不好......
-
@stickybit 是的,我真的很抱歉先生,我已经编辑了问题^^'
-
重叠测试很简单。如果事件 A 在事件 B 结束之前开始,并且在事件 B 开始之后结束,则事件 A 与事件 B 重叠。