如何实现Python+SQLite会议时间交集检测算法?
会议时间交集检测实现方案
核心逻辑:区间交集判断
两个时间区间存在交集的通用判断条件(假设会议时间为左闭右开区间,即[start, end)——比如10:00-11:00的会议覆盖10:00到10:59:59,11:00开始的会议可正常安排):
新会议的开始时间 < 已有会议的结束时间 并且 新会议的结束时间 > 已有会议的开始时间
只要数据库中存在满足该条件的会议,就说明时间冲突,无法插入新会议。
SQLite中的检测实现
假设你的会议表名为meetings,字段start_meeting和end_meeting均为存储分钟数的整数类型:
冲突检测查询
针对新会议的new_start(如600)和new_end(如660),执行以下参数化SQL查询:SELECT 1 FROM meetings WHERE start_meeting < ? AND end_meeting > ? LIMIT 1;注意替换
?的顺序:第一个?对应new_end,第二个?对应new_start。判断与执行逻辑
- 如果查询返回1条记录:说明存在时间冲突,拒绝插入新会议
- 如果查询无返回结果:说明无冲突,执行插入操作:
INSERT INTO meetings (start_meeting, end_meeting) VALUES (?, ?);
示例验证
用你提供的测试数据:
- 新会议:
600-660 - 已有会议:
530-630:满足600 < 630 AND 660 > 530,属于冲突540-600:600 < 600不成立,无冲突840-841:600 < 841成立,但660 > 840不成立,无冲突
因此检测查询会返回530-630这条记录,新会议无法插入。
优化建议
- 给时间字段添加索引,提升冲突检测的查询效率:
CREATE INDEX idx_meeting_time_range ON meetings (start_meeting, end_meeting); - 将检测和插入操作放在同一个事务中,避免并发场景下的竞态冲突:
BEGIN TRANSACTION; -- 执行冲突检测查询 -- 若无冲突,执行INSERT COMMIT;
内容的提问来源于stack exchange,提问作者phaestos
相关产品推荐
相关产品推荐

