使用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)
相关推荐
weixin_580614001 天前
MySQL存储过程中如何防止SQL注入_使用参数化查询规范
jvm·数据库·python
2401_837163891 天前
PHP源码开发用台式机还是笔记本更合适_硬件选型对比【方法】
jvm·数据库·python
baidu_340998821 天前
mysql修改列名会导致程序报错吗_Change Column语法与兼容性
jvm·数据库·python
只说证事1 天前
会计岗位向管理会计升级,最该补哪些数据分析技能
数据库·数据挖掘·数据分析
a9511416421 天前
如何加固SQL集群防注入_实施网络层访问控制策略
jvm·数据库·python
2401_835956811 天前
mysql处理大量更新场景_InnoDB MVCC与MyISAM对比
jvm·数据库·python
m0_748920361 天前
Oracle默认端口被占用如何连接_修改端口号操作教程
jvm·数据库·python
qq_342295821 天前
Redis怎样按照距离远近排序展示_通过GEORADIUS的ASC参数进行Geo排序
jvm·数据库·python
2201_761040591 天前
C#比较两个二进制文件的差异 C#如何实现一个二进制diff工具
jvm·数据库·python
Polar__Star1 天前
SQL中如何实现特定顺序的查询:CASE WHEN自定义排序
jvm·数据库·python