Sov*_*iut 6 database logic datetime
我有一个事件表,用于指定日期范围start_date和end_date字段.我有另一个在代码中指定的日期范围,它将当前周定义为'week_start'和'week_end'.
我想查询本周的所有活动.案件似乎是:
我试图提出一个可以处理所有这些情况的查询.到目前为止,我只能得到处理周重叠的案例,或完全内部的事件; 基本上,记录太多,或根本没有记录.
Qua*_*noi 21
(event.start BETWEEN week.start AND week.end)
OR
(week.start BETWEEN event.start AND event.end)
Run Code Online (Sandbox Code Playgroud)
简单来说,要么在活动期间开始一周,要么在一周内开始活动.
我们来检查一下:
活动在一周内开始和结束
该活动在一周内开始.
活动在一周之前开始,但在一周内结束
活动期间的一周开始.
活动在一周内开始,但在一周后结束
该活动在一周内开始.
活动在一周之前开始,也在一周之后结束
活动期间的一周开始.
请注意,BETWEEN上面的表达式仅用于简洁起见.
严格的表达式如下所示:
(event.start >= week.start AND event.start < week.end)
OR
(week.start >= event.start AND week.start < event.end)
Run Code Online (Sandbox Code Playgroud)
,如果week.end是week.start + INTERVAL 7 DAY.
I. e.如果你周开始Sun, 0:00:00,那么它应该结束next Sun, 0:00:00(不是Sat, 0:00:00)
此表达式看起来比常用的表达式更复杂:
event.start < week.end AND event.end > week.start
Run Code Online (Sandbox Code Playgroud)
,但前者更有效率和指数友好.
请参阅我的博客中的这些文章以进行性能比较: