我希望有人可以帮助处理复杂的日期范围SQL查询。
我需要找到一大堆可能的记录:
1)在搜索日期范围内
2)在搜索范围之外但是经过它
3)在搜索范围的左侧,从之前开始但在其结束期间结束
4)在搜索范围之外,从开始到结束之后。
这比我想象的要复杂得多!
到目前为止,我已经捕获了前两个。
AND (
(event_dates.date_start <= *startdate* AND event_dates.date_end >= *enddate*)
OR (event_dates.date_start >= *startdate* AND event_dates.date_end <= *enddate*)
)
如何在搜索范围之前和之后不包括所有内容的情况下包括最后两个?
非常感谢,
克里斯
答案 0 :(得分:4)
如果您想要所有可能触及日期范围的记录,那么您只想排除在范围结束后开始或在范围开始之前结束的记录:
NOT (date_start > *enddate* or date_end < *startdate*)
这相当于
date_start <= *enddate* and date_end >= *startdate*