(event.start BETWEEN week.start AND week.end)
OR
(week.start BETWEEN event.start AND event.end)
简而言之,要么在活动期间开始一周,要么在一周内开始活动。
让我们检查一下:
活动在一周内开始和结束
活动在一周内开始。
活动在一周前开始,但在一周内结束
一周在活动期间开始。
活动在一周内开始,但在一周后结束
活动在一周内开始。
活动在一周前开始,也在一周后结束
一周在活动期间开始。
请注意,BETWEEN
上面的表达式只是为了简洁起见。
严格的表达式如下所示:
(event.start >= week.start AND event.start < week.end)
OR
(week.start >= event.start AND week.start < event.end)
, 前提week.end
是week.start + INTERVAL 7 DAY
.
IE。如果您的一周开始于Sun, 0:00:00
,那么它应该结束于next Sun, 0:00:00
(而不是Sat, 0:00:00
)
这个表达式看起来比常用的更复杂:
event.start < week.end AND event.end > week.start
,但前者更高效且索引友好。
有关性能比较,请参阅我的博客中的这些文章: