开发者社区> 问答> 正文

检查MySQL中日期范围的重叠

该表用于存储会话(事件):

CREATE TABLE session ( id int(11) NOT NULL AUTO_INCREMENT , start_date date , end_date date );

INSERT INTO session (start_date, end_date) VALUES ("2010-01-01", "2010-01-10") , ("2010-01-20", "2010-01-30") , ("2010-02-01", "2010-02-15") ; 我们不想在范围之间产生冲突。 假设我们需要在2010-01-05至2010-01-25之间插入一个新会话。 我们想知道有冲突的会话。

这是我的查询:

SELECT * FROM session WHERE "2010-01-05" BETWEEN start_date AND end_date OR "2010-01-25" BETWEEN start_date AND end_date OR "2010-01-05" >= start_date AND "2010-01-25" <= end_date ; 结果如下:

+----+------------+------------+ | id | start_date | end_date | +----+------------+------------+ | 1 | 2010-01-01 | 2010-01-10 | | 2 | 2010-01-20 | 2010-01-30 | +----+------------+------------+ 有没有更好的方法来做到这一点?

展开
收起
保持可爱mmm 2020-05-10 22:13:33 461 0
1 条回答
写回答
取消 提交回答
  • 我曾经用日历应用程序进行过这样的查询。我想我使用了这样的东西:

    ... WHERE new_start < existing_end AND new_end > existing_start; 更新这肯定应该工作((ns,ne,es,ee)=(new_start,new_end,existing_start,existing_end)):

    ns-ne-es-ee:不重叠且不匹配(因为ne <es) ns-es-ne-ee:重叠和匹配 es-ns-ee-ne:重叠和匹配 es-ee-ns-ne:不重叠且不匹配(因为ns> ee) es-ns-ne-ee:重叠和匹配 ns-es-ee-ne:重叠和匹配来源:stack overflow

    2020-05-10 22:13:54
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
搭建电商项目架构连接MySQL 立即下载
搭建4层电商项目架构,实战连接MySQL 立即下载
PolarDB MySQL引擎重磅功能及产品能力盛大发布 立即下载

相关镜像