【发布时间】:2021-05-15 14:06:57
【问题描述】:
有没有使用 BETWEEN 但不包括您要检查的两个日期的简单方法?我注意到如果你使用 BETWEEN 它包括开始和结束日期本身。我一直在研究预订系统,并希望在另一次预订之间或与另一次预订重叠时阻止客人预订日期。
例如如果有 5 月 20 日至 5 月 25 日的预订,我不希望任何人能够预订这些日期,无论新预订的开始和结束日期如何。不过,我确实希望用户能够将其结束日期设置为与其他预订的开始日期相同的日期,或者将开始日期设置为与不同预订的结束日期相同的日期。
原来我有:
SELECT id
FROM table
WHERE (? BETWEEN arrive_date AND depart_date)
OR (? BETWEEN arrive_date AND depart_date)
第一个?是为了新的到达日期和第二个?是新的结束日期。
但是当检查它包括开始和结束日期时,我试图制定正确的公式并得到这个:
SELECT id FROM table
WHERE (? BETWEEN arrive_date - INTERVAL 1 DAY AND depart_date - INTERVAL 1 DAY)
OR (? BETWEEN arrive_date + INTERVAL 1 DAY AND depart_date - INTERVAL 1 DAY)
看起来不错,但后来我注意到如果我预订,例如 11 月 9 日和 11 月 10 日,我也可以预订 11 月 15 日的 6 日。
我认为我所拥有的是正确的,我仍在努力解决问题,但如果有人能看到我哪里出错了,那将会很有帮助!
【问题讨论】:
-
但是为什么要把自己束缚在 BETWEEN 上呢?