检查搜索和搜索日期beetwen交易从日期和交易到日期在sql中

时间:2017-05-17 08:37:12

标签: mysql sql date

我有一张表如下。

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查询但没有工作。我怎么能克服这一点。

3 个答案:

答案 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'