我有一个事件表,其中记录了开始和结束时间作为MySQL DATETIME对象(格式YYYY-MM-DD HH:MM:SS
.我想查找在特定日期范围内发生的所有事件.但是,事件可以跨越多天(并且超出我的范围)日期范围,但如果它们与我的日期范围重叠1秒或更多,我想返回它们.
建议?
Rob*_*ble 17
这将找到完全包含在范围内的每个事件:
SELECT * FROM table WHERE start_date BETWEEN start_of_range AND end_of_range
AND stop_date BETWEEN start_of_range AND end_of_range
Run Code Online (Sandbox Code Playgroud)
这将查找事件的任何部分与范围的任何部分重叠的任何事件:
SELECT * FROM table WHERE start_date <= end_of_range
AND stop_date >= start_of_range
Run Code Online (Sandbox Code Playgroud)
@Bill the Lizard和@Robert Gamble的回答对于问题是正确的,但是我想知道你是否在问你认为你是什么......如果你正在寻找重叠的事件那么你需要考虑帐户活动超过您的搜索范围.
Monday Tuesday Wednesday Thursday
Search: |-----------|
Shopping |-----| Found OK
Eating |--------| Found OK
Stack Overflow |---------------------------------| Not found!
Run Code Online (Sandbox Code Playgroud)
如果你想包含SO,你会做:
SELECT * FROM table WHERE (start_date < end_of_range AND end_date > start_of_range)