我有一个表格如下。
DealID DealTitle DealStart_Date DealEnd_Date
1 A 2017-05-01 00:00:00 2017-05-05 00:00:00
2 B 2017-05-02 00:00:00 2017-05-06 00:00:00
3 C 2017-05-03 00:00:00 2017-05-07 00:00:00
4 D 2017-05-04 00:00:00 2017-05-08 00:00:00
5 E 2017-05-05 00:00:00 2017-05-09 00:00:00
现在在搜索中我正在使用两个日期搜索数据
Deal From : 2017-05-08 00:00:00
Deal To : 2017-05-15 00:00:00
根据逻辑,应该返回DealID 4和6
我使用的查询是
SELECT * FROM dealofday WHERE '2017-05-02 00:00:00' AND '2017-05-05 00:00:00' BETWEEN DealStart_Date AND DealStart_Date ORDER BY DealID ASC
我尝试过中间查询但没有成功。我怎样才能克服这个问题。
最佳答案
如果您想在表中存储的范围与您提供的搜索范围之间找到任何形式的重叠,一对简单的比较就足够了:
SELECT * FROM dealofday
WHERE '2017-05-02 00:00:00' < DealEnd_Date AND
DealStart_Date < '2017-05-05 00:00:00'
ORDER BY DealID ASC
或者,用英语来说 - 如果第一个周期在第二个周期结束之前开始,并且第二个周期在第一个周期结束之前开始,则两个周期重叠。
您可以调整 <
对于 <=
,取决于端点是包含的还是排除的,以及恰好邻接1的两个周期是否被视为重叠。
1一个时期开始于另一个时期结束的确切时间点。
关于mysql - 检查 SQL 中的“交易起始日期”和“交易截止日期”之间的“搜索起始日期”和“搜索截止日期”,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44019653/