gpt4 book ai didi

mysql - 检查 MySQL 中日期范围的重叠

转载 作者:行者123 更新时间:2023-11-29 17:20:29 25 4
gpt4 key购买 nike

该表用于存储 session (事件):

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-052010-01-25 的新 session 。
我们想知道冲突的 session 。

这是我的查询:

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 |
+----+------------+------------+

有更好的方法吗?

<小时/>

fiddle

最佳答案

我曾经编写过一个日历应用程序,有这样的查询。我想我用过这样的东西:

... WHERE new_start < existing_end
AND new_end > existing_start;

更新这绝对应该有效((ns,ne,es,ee)=(new_start,new_end,existing_start,existing_end)):

  1. ns - ne - es - ee:不重叠且不匹配(因为 ne < es)
  2. ns - es - ne - ee:重叠和匹配
  3. es - ns - ee - ne:重叠和匹配
  4. es - ee - ns - ne:不重叠且不匹配(因为 ns > ee)
  5. es - ns - ne - ee:重叠和匹配
  6. ns - es - ee - ne:重叠和匹配
<小时/>

这是一个fiddle

关于mysql - 检查 MySQL 中日期范围的重叠,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51273620/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com