mysql - 检查 MYSQL 表行中是否存在特定时间范围
问题描述
我有一张表,其中包含各种事件的开始和结束日期时间。在图像中,您可以看到为事件定义了不同的日期范围,作为事件的开始时间和结束时间。
现在,当用户要添加新事件时,我需要根据现有记录检查时间。我在查询之间尝试过,但它没有给我正确的结果。
Start END
2020-07-20 14:15 2020-07-20 15:00 - Not allowed(record #1)
2020-07-20 10:30 2020-07-20 11:00 - Not allowed (record #3)
2020-07-20 11:00 2020-07-20 12:00 - Not allowed(record #3)
2020-07-20 13:00 2020-07-20 14:00 - Allowed
如何根据 MySQL 中的上述所有条件获得至少重复(不允许)记录的数量?
解决方案
您希望确保新插入的行不会与现有间隔重叠。一种选择是not exists
:
insert into mytable (start, end)
select v.*
from (select '2020-07-20 14:15' start, '2020-07-20 15:00' end) v
where not exists (
select 1
from mytable t
where t.start <= v.end and t.end >= v.start
)
推荐阅读
- c# - 使用 MvvmCross 将图标添加到 TabLayout
- symfony - Doctrine OneToOne 关系双向
- jquery - 为不同的数据库实体显示相同的模式形式
- python - 此 python 有效,但正在寻找更优雅的解决方案(Try and Catch with 1/0 hack)
- excel - 如何粘贴到 Excel 过滤器中的可见单元格中?
- sql - 如何获得每个客户每天花费的最大时间
- c# - 用值展平表达式参数
- javascript - 在不考虑时区的情况下将字符串转换为日期 - 打字稿
- java - 使用 ContentResolver 和 openInputStream() (Android)
- excel - 使用 COUNTIF / VLOOKUP 进行库存管理