我有一个课程预定日历,我正在检查讲师是否在指定时间预定或是否有空。
我有下表要保存 lesson_registrations
```
| id | InstructorId | startTime | endTime |
| 1 | 2 | 201806271100 | 201806271200 |
| 2 | 2 | 201806271400 | 201806271500 |
所以根据这张表,讲师可以在 `201806271200` 至 `201806271400` 但是,当我运行下面的查询时,它会将讲师标记为已预订。
SELECT * FROM lesson_registrations
WHERE
((startTime BETWEEN '201806271200' AND '201806271400' )
OR (endTime BETWEEN '201806271200' AND '201806271400')
OR ('201806271200' BETWEEN startTime AND endTime)
OR ('201806271400' BETWEEN startTime AND endTime) )
我做错什么了?
谢谢您
2条答案
按热度按时间nue99wik1#
我认为,因为between是inclusive语句正在捕获以201806271200作为结束时间的记录。如果您运行以下命令,则不会得到显示有可用课程的结果。
是1200算作结束时间,所以下一个的开始时间需要在1201或者结束时间需要在1159,开始时间可以是1200
wvmv3b1j2#
找到任何重叠的正确逻辑是:
要获得可用的讲师:
逻辑基本上是说,如果以下两个条件成立,教员就不可用:
a课在结束时间之前随时开始。
相同的课程在开始时间之后的任何时间结束。