mysql之查询两个时间段是否有交集的情况

 更新时间:2023年08月30日 10:47:25   作者:小小初行者  
这篇文章主要介绍了mysql之查询两个时间段是否有交集的情况,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教

mysql查询两个时间段是否有交集的情况

数据库的字段 start_time, end_time

输入的字段 a,b

第一种

SELECT * FROM test_table
WHERE
    (start_time >= a AND start_time <= b)
    OR (start_time <= a AND end_time >= b)
    OR (end_time >= a AND end_time <= b) 

第二种

SELECT * FROM test_table
WHERE
    NOT (
        (end_time < a
        OR (start_time > b)
    ) 

两种结果相同

mysql时间段交集查询

可订房间的查询逻辑(时间段没有相交的时间段),这个sql可以直接扔到navicat运行校验下

相交分为以下四种情况情况

drop table if EXISTS `test_date`;
CREATE TABLE `test_date` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `room_id` int(11) DEFAULT NULL COMMENT '房间id',
  `start_time` datetime DEFAULT NULL COMMENT '房态开始时间',
  `end_time` datetime DEFAULT NULL COMMENT '房态结束时间',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
INSERT INTO `test`.`test_date`(`id`, `room_id`, `start_time`, `end_time`) 
VALUES (1, 1, '2020-05-20 15:00:00', '2020-05-22 12:00:00');
INSERT INTO `test`.`test_date`(`id`, `room_id`, `start_time`, `end_time`) 
VALUES (2, 1, '2020-05-25 15:00:00', '2020-05-27 12:00:00');
-- 查询入住时间
set @s = '2020-05-18 23:59:59';
-- 查询离店时间
set @e = '2020-05-21 00:00:00';
-- 这个sql查询出来的话,是不合适的数据,有重叠
select * from test_date
where 
(start_time <= @s and end_time >= @s)
or
(start_time <= @e and end_time >= @e)
or
(start_time >= @s and end_time <= @e)
or
(start_time <= @s and end_time >= @e);
-- 这个sql不加反,求出来的是合适的数据,不重叠的数据
-- 取反,就是重叠的数据,日期不符合规范的数据,有相交的数据
select * from test_date
where
!(start_time >= @e or end_time <= @s);

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • mysql 发生系统错误1067的解决方法

    mysql 发生系统错误1067的解决方法

    今天要把WEB项目打包成EXE,可是在数据库上卡住了。在启动数据库服务的时候发生系统错误 1067。
    2009-09-09
  • 使用SQL实现按每小时统计数据

    使用SQL实现按每小时统计数据

    在数据分析和报表生成中,按小时统计数据是一个常见的需求,因为小时级别的数据统计都能提供细致且有价值的信息,下面我们就来看看具体实现方法吧
    2024-11-11
  • MySQL处理大量DELETE操作的多种方法

    MySQL处理大量DELETE操作的多种方法

    本文将讨论 MySQL 中的大量 DELETE 操作,包括其潜在影响、最佳实践和性能优化策略,我们将通过 Java 代码示例展示如何高效地执行这些操作,并分析不同方法的优缺点,最后,提供相关的测试用例及结果预期,以帮助开发者更好地理解和应用这些技术,需要的朋友可以参考下
    2024-10-10
  • 深入解析MySQL双写缓冲区

    深入解析MySQL双写缓冲区

    双写缓冲区是MySQL中的一种优化方式,主要用于提高数据的写性能,本文将介绍Doublewrite Buffer的原理和应用,帮助读者深入理解其如何提高MySQL的数据可靠性并防止可能的数据损坏,感兴趣的可以了解一下
    2024-02-02
  • MySQL配置了双主,是如何避免出现数据回环冲突的

    MySQL配置了双主,是如何避免出现数据回环冲突的

    这篇文章主要介绍了MySQL配置了双主,是如何避免出现数据回环冲突的,帮助大家更好的理解和使用MySQL数据库,感兴趣的朋友可以了解下
    2021-01-01
  • Windows平台配置5.7版本+MySQL数据库服务

    Windows平台配置5.7版本+MySQL数据库服务

    这篇文章主要介绍了Windows平台配置5.7版本+MySQL数据库服务的方法,包括初始化root用户密码password的过程以及两个常见问题的解决方法,需要的朋友参考下吧
    2017-06-06
  • MYSQL复杂查询练习题以及答案大全(难度适中)

    MYSQL复杂查询练习题以及答案大全(难度适中)

    在我们学习mysql数据库时需要一些题目进行练习,下面这篇文章主要给大家介绍了关于MYSQL复杂查询练习题以及答案的相关资料,文中通过实例代码介绍的非常详细,这些练习题难度适中,需要的朋友可以参考下
    2022-08-08
  • CentOS 7.2下MySQL的安装与相关配置

    CentOS 7.2下MySQL的安装与相关配置

    最近因为工作需要,要在CentOS上安装MySQL,在安装的时候遇到了一点问题,花了点时间解决了,感觉不管是官网还是网上的一些教程都不够完整,不能一次性帮新手解决问题,于是我就结合官网和网上的资源整理了下,现在分享给大家,希望对有需要的朋友们能有所帮助。
    2016-11-11
  • mysql Buffer Pool的存储结构和内存淘汰机制详解

    mysql Buffer Pool的存储结构和内存淘汰机制详解

    这篇文章主要介绍了mysql Buffer Pool的存储结构和内存淘汰机制详解,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2025-03-03
  • MySQL 5.7双主同步部分表的实现过程详解

    MySQL 5.7双主同步部分表的实现过程详解

    这篇文章主要给大家介绍了关于MySQL 5.7双主同步部分表实现的相关资料,文中通过示例代码介绍的非常详细,对大家学习或者使用mysql具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧。
    2017-09-09

最新评论