gpt4 book ai didi

mysql选择不属于给定间隔的时间间隔

转载 作者:行者123 更新时间:2023-11-29 06:36:02 26 4
gpt4 key购买 nike

假设我有下表

+----------+------------+-----------+----------+
| class_id | teacher_id | starts_at | ends_at |
+----------+------------+-----------+----------+
| 39 | 5 | 15:00:00 | 21:00:00 |
| 40 | 20 | 18:00:00 | 21:00:00 |
| 41 | 59 | 18:00:00 | 21:00:00 |
| 42 | 21 | 18:30:00 | 20:00:00 |
| 43 | 80 | 18:30:00 | 21:00:00 |
| 44 | NULL | 17:30:00 | 21:00:00 |
| 45 | 140 | 17:30:00 | 20:00:00 |
| 46 | 123 | 18:30:00 | 21:00:00 |
+----------+------------+-----------+----------+

对于特定情况,我手头没有可用的老师,但我需要选择那些上课时间不属于特定给定时间的老师。例如。新类(class) (class_id=47) 已公布,时间为 15:00:0017:30:00。现在我想选择 teacher_id,他的现有类(class)时间不属于此区间。我应该如何写这个查询?

尝试过这个,但我错了:

SELECT * from classes 
where time(starts_at) not between '15:00:00' and '17:30:00'
and time(ends_at) not between '15:00:00' and '17:30:00'

最佳答案

这只是重叠范围问题。您可以使用以下逻辑:

SELECT *
FROM classes
WHERE '15:00:00' >= ends_at OR '17:30:00' <= starts_at;

enter image description here

Demo

我使用的逻辑是借用规范问题Check overlap of date ranges in MySQL

要查找与新的传入开始和结束时间重叠的记录,我们将使用:

WHERE new_start < existing_end AND new_end > existing_start;

但是,在您的情况下,您需要零重叠的范围,即与上述相反。根据德摩根定律,上述逻辑就变为:

WHERE new_start >= existing_end AND new_end <= existing_start;

关于mysql选择不属于给定间隔的时间间隔,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53827376/

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