MYSQL时间重合的判断
思路:
第二条的开始时间<=第一条的结束时间
第二条的结束时间>=第二条的开始时间
1.建表
CREATE TABLE tb_time (
id int NOT NULL AUTO_INCREMENT,
user_id varchar(32) DEFAULT NULL,
username varchar(255) DEFAULT NULL,
start_time datetime DEFAULT NULL,
end_time datetime DEFAULT NULL,
sale int DEFAULT NULL COMMENT '销售量',
PRIMARY KEY (id)
) NGINE=InnoDB AUTO_INCREMENT=8 DEFAULT CHARSET=utf8mb3;
2.插入数据
INSERT INTO test.tb_time (id, user_id, username, start_time, end_time, sale) VALUES (1, '12245457878', '张一', '2022-10-01 15:23:26', '2022-10-03 20:23:36', 20);
INSERT INTO test.tb_time (id, user_id, username, start_time, end_time, sale) VALUES (2, '12245457878', '张二', '2022-10-04 15:25:50', '2022-10-06 15:25:57', 10);
INSERT INTO test.tb_time (id, user_id, username, start_time, end_time, sale) VALUES (3, '12245457878', '张三', '2022-10-07 00:26:20', '2022-10-07 07:26:35', 5);
INSERT INTO test.tb_time (id, user_id, username, start_time, end_time, sale) VALUES (4, '12245457878', '张四', '2022-10-08 07:00:55', '2022-10-08 09:00:55', 22);
INSERT INTO test.tb_time (id, user_id, username, start_time, end_time, sale) VALUES (5, '12245457878', '张五', '2022-10-08 10:00:55', '2022-10-08 12:00:55', 13);
INSERT INTO test.tb_time (id, user_id, username, start_time, end_time, sale) VALUES (6, '12245457878', '张六', '2022-10-09 10:00:55', '2022-10-09 11:00:55', 1);
INSERT INTO test.tb_time (id, user_id, username, start_time, end_time, sale) VALUES (7, '12245457878', '张七', '2022-10-09 13:00:55', '2022-10-09 14:00:55', 15);
3.测试
select * from tb_time where '2022-10-08 05:05:06' <=end_time and '2022-10-08 09:05:06'>=start_time
如果能查到结果,表示要插入的数据与表里面的数据有时间重合
附加知识:
mysql不用进行类型转换就可以进行时间和字符串比较大小
字符串转日期
select str_to_date('2022-10-08 09:05:06','%Y-%m-%d %H:%i:%s') from dual
日期转字符串
select date_format(now(),'%Y-%m-%d %H:%i:%S') from dual
select date_format(now(),'%Y年%m月%d日') from dual
select cast('2022-10-08 23:05:06' as datetime) from dual
关于cast函数:cast不能转字符串为int类型