我有一张表如下。
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 and 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
我已经尝试了beetween查询但没有工作。我怎么能克服这一点。
答案 0 :(得分:1)
如果您想在表格中存储的范围与您提供的搜索范围之间找到任何形式的重叠,则只需进行一对简单的比较即可:
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 被认为是重叠。
1 一个时期从对方结束的确切时间点开始。
答案 1 :(得分:0)
我不确定这是否是您要找的,但我会做类似
的事情SELECT *
FROM dealofday
WHERE DealStart_Date > '2017-05-02 00:00:00'
AND DealEnd_Date < '2017-05-15 00:00:00'
答案 2 :(得分:0)
获得解决方案
<强> SELECT * FROM dealofday WHERE DealStart_Date BETWEEN '2017-05-08 00:00:00' AND '2017-05-15 00:00:00' OR DealEnd_Date BETWEEN '2017-05-08 00:00:00' AND '2017-05-15 00:00:00'
强>