You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

MySQL中基于两日期列的区间查询结果异常求助

解决MySQL时间段筛选的问题

咱们先明确你的需求:你需要从events表中筛选出与2018-01-14至2018-01-16这个时间段存在重叠的记录,预期得到eventId为1和3的数据。

你原来SQL的问题

你写的查询语句:

SELECT eventId FROM events WHERE startDate <= '2018-01-30' AND DueDate <= '2018-01-30'

(我猜你这里可能是笔误,本来想写2018-01-16?不过不管目标日期是什么,这个逻辑本身就不对)

这个条件要求事件的开始日期和结束日期都早于等于目标日期,但eventId=1的dueDate是2018-01-17,大于你要筛选的截止日期2018-01-16,所以这条记录被排除了,这就是你只得到eventId=3的原因。

正确的时间段重叠判断逻辑

要筛选出与目标时间段[2018-01-14, 2018-01-16]有重叠的事件,核心逻辑是:

事件的开始日期 ≤ 目标时间段的结束日期,并且事件的结束日期 ≥ 目标时间段的开始日期

这个逻辑能覆盖所有重叠场景:比如事件完全在目标时段内、事件跨目标时段的开始/结束点、甚至事件完全包含目标时段。

正确的SQL语句

SELECT eventId FROM events 
WHERE startDate <= '2018-01-16' 
  AND dueDate >= '2018-01-14';

验证结果

我们来逐个核对数据:

  • eventId=1:startDate=2018-01-15 ≤ 2018-01-16,且dueDate=2018-01-17 ≥ 2018-01-14 → 符合条件
  • eventId=2:startDate=2018-01-25 > 2018-01-16 → 不符合
  • eventId=3:startDate=2018-01-11 ≤ 2018-01-16,且dueDate=2018-01-16 ≥ 2018-01-14 → 符合条件

正好得到你预期的eventId 1和3的结果。

内容的提问来源于stack exchange,提问作者Ganesh M

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.19 03:13:11