mysql - 检查 SQL 中的“交易起始日期”和“交易截止日期”之间的“搜索起始日期”和“搜索截止日期”

标签 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和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/

相关文章:

Mysql 按键联接两个表

mysql - MySQL 上共同好友订购的好友推荐

r - 在 Shiny for R 中,为什么 Sys.Date() 在 dateInput 中返回昨天的日期?

sql - 找出运行缓慢的存储过程

sql - 为什么我一次使用后都无法访问CTE?

javascript - 采用 ISO 格式的每月周数(如果跨过星期四则算周数)

c++ - 将 SQLite 日期字段转换为 C++ Time_T

mysql - 如何确保所有 mysql 查询都被执行或如果其中一个查询失败则回滚到原始状态?

python - 1694 (HY000) : Cannot modify @@session. 事务内的 sql_log_bin

MySQL删除多表上的行外键?