首页 > 解决方案 > 检查 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 中的上述所有条件获得至少重复(不允许)记录的数量?

标签: mysqlsqldatetimesql-insertbetween

解决方案


您希望确保新插入的行不会与现有间隔重叠。一种选择是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
)

推荐阅读