SQL 如何查询区间重叠的数据?
发布时间 - 2026-01-20 00:00:00 点击率:次判断区间重叠应采用“不重叠”的反向逻辑:两区间[A1,A2]与[B1,B2]不重叠当且仅当A2=a_start,并注意处理NULL和数据类型一致性。
判断区间重叠,核心是用“不重叠”的反向逻辑来写条件,比直接判断重叠更简洁可靠。
理解区间不重叠的两种情况
两个区间 [A1, A2] 和 [B1, B2](假设左闭右闭),它们完全不重叠只有两种可能:
- A2
- B2
因此,只要这两个条件都不成立,就说明存在重叠。SQL 中可直接写成:
WHERE NOT (a_end < b_start OR b_end < a_start)
等价于:
WHERE a_end >= b_start AND b_end >= a_start
查自身表中互相重叠的记录(自连接)
比如一张 events 表,有 id、start_time、end_time,要找出所有与其他事件时间重叠的事件:
SELECT DISTINCT e1.id, e1.start_time, e1.end_time FROM events e1 INNER JOIN events e2 ON e1.id != e2.id AND e1.end_time >= e2.start_time AND e2.end_time >= e1.start_time;
注意:e1.id != e2.id 避免自己和自己匹配;DISTINCT 防止同一事件因多次重叠被重复列出。
查某固定区间与表中哪些记录重叠
例如:查 2025-05-01 09:00 到 2025-05-01 12:00 这个时间段内,有哪些订单的配送时间与之重叠:
SELECT * FROM orders WHERE delivery_end >= '2025-05-01 09:00' AND delivery_start <= '2024-05-01 12:00';
这里用的是「固定区间 [S, E] 与动态区间 [a, b] 重叠」的通用写法:b >= S AND a —— 更直观,推荐日常使用。
注意边界和数据类型
重叠判断对边界敏感:
- 若区间为左闭右开(如 [start, end)),条件应改为
a_end > b_start AND b_end > a_start - 确保
start和end字段类型一致(都是 DATETIME 或都是 TIMESTAMP),避免隐式转换出错 - 如果字段允许 NULL,需额外处理,例如加
WHERE start_time IS NOT NULL AND end_time IS NOT NULL
# 隐式转换
# sql
# 数据类型
# NULL
# timestamp
# 事件
# 都是
# 两种
# 的是
# 都不
# 这两个
# 要找
# 与之
# 可直接
# 来写
# 为左
相关栏目:
【
网站优化151355 】
【
网络推广146373 】
【
网络技术251813 】
【
AI营销90571 】
相关推荐:
详解Android图表 MPAndroidChart折线图
香港服务器网站推广:SEO优化与外贸独立站搭建策略
图册素材网站设计制作软件,图册的导出方式有几种?
Laravel如何集成第三方登录_Laravel Socialite实现微信QQ微博登录
网站制作软件有哪些,制图软件有哪些?
如何注册花生壳免费域名并搭建个人网站?
,南京靠谱的征婚网站?
Laravel如何处理JSON字段的查询和更新_Laravel JSON列操作与查询技巧
Laravel Eloquent关联是什么_Laravel模型一对一与一对多关系精讲
湖南网站制作公司,湖南上善若水科技有限公司做什么的?
Laravel如何使用Laravel Vite编译前端_Laravel10以上版本前端静态资源管理【教程】
BootStrap整体框架之基础布局组件
HTML 中如何正确使用模板变量为元素的 name 属性赋值
如何在 React 中条件性地遍历数组并渲染元素
Javascript中的事件循环是如何工作的_如何利用Javascript事件循环优化异步代码?
浅析上传头像示例及其注意事项
Laravel如何使用Blade组件和插槽?(Component代码示例)
Laravel如何发送邮件和通知_Laravel邮件与通知系统发送步骤
如何在云指建站中生成FTP站点?
Internet Explorer官网直接进入 IE浏览器在线体验版网址
php嵌入式断网后怎么恢复_php检测网络重连并恢复硬件控制【操作】
如何挑选优质建站一级代理提升网站排名?
原生JS实现图片轮播切换效果
Laravel怎么实现模型属性的自动加密
Win11怎么设置默认图片查看器_Windows11照片应用关联设置
网站建设要注意的标准 促进网站用户好感度!
Java类加载基本过程详细介绍
如何快速搭建安全的FTP站点?
Laravel如何实现多语言支持_Laravel本地化与国际化(i18n)配置教程
js代码实现下拉菜单【推荐】
Laravel如何使用查询构建器?(Query Builder高级用法)
Win11怎么修改DNS服务器 Win11设置DNS加速网络【指南】
详解jQuery中基本的动画方法
创业网站制作流程,创业网站可靠吗?
使用豆包 AI 辅助进行简单网页 HTML 结构设计
JavaScript模板引擎Template.js使用详解
Python正则表达式进阶教程_复杂匹配与分组替换解析
矢量图网站制作软件,用千图网的一张矢量图做公司app首页,该网站并未说明版权等问题,这样做算不算侵权?应该如何解决?
如何在万网ECS上快速搭建专属网站?
Swift中switch语句区间和元组模式匹配
详解阿里云nginx服务器多站点的配置
Python3.6正式版新特性预览
如何快速搭建虚拟主机网站?新手必看指南
Laravel如何处理JSON字段_Eloquent原生JSON字段类型操作教程
如何快速上传自定义模板至建站之星?
Laravel如何升级到最新版本?(升级指南和步骤)
如何在IIS7中新建站点?详细步骤解析
Laravel怎么定时执行任务_Laravel任务调度器Schedule配置与Cron设置【教程】
如何在服务器上三步完成建站并提升流量?
EditPlus 正则表达式 实战(3)


