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

C# SQL查询问题:预约时间重叠检测逻辑异常排查

解决SQL预约时间重叠检测逻辑问题

问题根源

你当前使用的查询条件AssignStartTime >= 新增开始时间 AND AssignEndTime <= 新增结束时间,仅能检测已有时间段完全被新增时间段包含的场景,无法覆盖部分重叠的情况,这就是部分重叠预约无法被检测到的核心原因。

正确的时间重叠判断逻辑

两个时间段(已有时间段S1-E1,新增时间段S2-E2)存在重叠的标准判断逻辑是:

新增时间段的开始时间 < 已有时间段的结束时间 且 新增时间段的结束时间 > 已有时间段的开始时间

对应的SQL语句如下:

SELECT * 
FROM tblAssignDoctor 
WHERE AssignEndTime > '新增开始时间' AND AssignStartTime < '新增结束时间'

验证你的场景

针对你提到的两种无法检测的情况:

  • 新增预约:03-Aug-22 9:00:00 AM 至 03-Aug-22 12:00:00 PM
    代入条件后:AssignEndTime > '03-Aug-22 9:00:00 AM' AND AssignStartTime < '03-Aug-22 12:00:00 PM'
    已有数据的AssignEndTime为12:00 PM(大于9:00 AM),AssignStartTime为8:00 AM(小于12:00 PM),条件成立,能正常查到数据。

  • 新增预约:03-Aug-22 8:00:00 AM 至 03-Aug-22 11:00:00 AM
    代入条件后:AssignEndTime > '03-Aug-22 8:00:00 AM' AND AssignStartTime < '03-Aug-22 11:00:00 AM'
    已有数据的AssignEndTime为12:00 PM(大于8:00 AM),AssignStartTime为8:00 AM(小于11:00 AM),条件成立,能正常查到数据。

补充:端点重合的处理

如果业务需要把时间段端点完全重合的情况也算作重叠(比如已有预约结束于12:00 PM,新增预约开始于12:00 PM),可以将判断条件调整为:

SELECT * 
FROM tblAssignDoctor 
WHERE AssignEndTime >= '新增开始时间' AND AssignStartTime <= '新增结束时间'

具体是否包含端点,可根据实际业务规则决定。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.23 13:57:20