使用sql判断两段时间是否重叠

使用sql判断两段时间是否重叠

假设现在有时间 [startTime, endTime], 数据库存在字段 sql_start_time 和 sql_end_time, 分别表示要判断的时间段和数据库的时间段, 分析是否2个时间段是否存在重叠部分

1. 时间点重叠判断

a)时间重叠有以下4种情况

红色代表要判断的时间段 [startTime, endTime], 蓝色代表数据库时间段[sql_start_time 和 sql_end_time]
1 2 3 4 5 6 7 8 9 10 1 2 时间重叠的情况1
1 2 3 4 5 6 7 8 9 10 2 1 时间重叠的情况2
1 2 3 4 5 6 7 8 9 10 1 2 时间重叠的情况3
1 2 3 4 5 6 7 8 9 10 2 1 时间重叠的情况4

a)时间不重叠只有以下2种情况

1 2 3 4 5 6 7 8 9 10 1 2 时间不重叠的情况1
1 2 3 4 5 6 7 8 9 10 2 1 时间不重叠的情况2

由于不重叠的情况只有2种, 故我们直接用不重叠的情况判断即可, 如果需要判断重叠, 则直接!(不重叠的条件)即可

判断条件, 不重叠的判断

时间段a的最大时间小于等于时间段b的最小时间


时间段b的最大时间小于等于时间段a的最小时间

sql表示

sql 复制代码
select * from xtable  
where (endTime <= sql_start_time or sql_end_time <= startTime)

判断条件, 重叠的判断

取不重叠的判断条件加非判断, !(时间段a的最大时间小于等于时间段b的最小时间 或 时间段b的最大时间小于等于时间段a的最小时间)

整理可得:

时间段a的最大时间大于时间段b的最小时间


时间段b的最大时间打于时间段a的最小时间

将条件带回上面4种情况, 成立

sql表示

sql 复制代码
select * from xtable 
where (endTime > sql_start_time and sql_end_time > startTime)
相关推荐
皇族崛起1 小时前
【视觉多模态】- 3D建模尝试 I (广场3D建模,失败)
数据库·人工智能·3d·性能优化
JavaLearnerZGQ1 小时前
redis笔记大全
数据库·redis·笔记
资生算法程序员_畅想家_剑魔1 小时前
Java常见技术分享-26-事务安全-锁机制-作用与分类
java·开发语言·数据库
Vic101011 小时前
PostgreSQL 中 nextval() 的线程安全性解析
java·数据库·postgresql
写代码的小阿帆2 小时前
Redis缓存健壮性——穿透、雪崩与击穿防护
数据库·redis·缓存
wangqiaowq2 小时前
使用 mysqldump 导出 + mysql 导入
数据库
qq_317620313 小时前
第23章-中级项目练习案例(15个)
数据库·爬虫·web开发·python项目·api开发·python案例
是三好3 小时前
SQL 性能分析及优化
android·数据库·sql
indexsunny3 小时前
互联网大厂Java面试实战:从Spring Boot到微服务的逐步深入
java·数据库·spring boot·微服务·kafka·监控·安全认证
小光学长3 小时前
ssm手工艺品交易平台4xccvou1(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。
java·数据库·spring