检查mysql表行中是否存在特定的时间范围

o8x7eapl  于 2021-07-26  发布在  Java
关注(0)|答案(1)|浏览(313)


我有一个表,其中包含各种事件的开始和结束日期时间。在图像中,您可以看到为事件定义的不同日期范围是事件的开始时间和结束时间。
现在,当用户要添加新事件时,我需要根据现有记录检查时间。我尝试了中间查询,但结果不正确。

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中,基于以上所有条件,如何至少获得重复(不允许)记录的计数?

fivyi3re

fivyi3re1#

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

相关问题