程序问答   发布时间:2022-06-02  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了在不包括两个日期的情况下使用 BETWEEN 条件大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。

如何解决在不包括两个日期的情况下使用 betweeN 条件?

开发过程中遇到在不包括两个日期的情况下使用 betweeN 条件的问题如何解决?下面主要结合日常开发的经验,给出你关于在不包括两个日期的情况下使用 betweeN 条件的解决方法建议,希望对你解决在不包括两个日期的情况下使用 betweeN 条件有所启发或帮助;

是否有一种简单的方法可以使用 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 月 6 日和 15 日。

我认为我所做的是正确的,我仍在努力解决,但如果有人能看到我哪里出错了,那将会很有帮助!

解决方法

如果表中有一行 arrive_date 小于查询的出发日期且 depart_date 大于查询的到达日期,那么您将得到结果 'booked',否则您将得到'free'

SELECT CASE
  WHEN EXISTS (
    SELECT 1 
    FROM `table` 
    WHERE :depart_date > arrive_date AND :arrive_date < depart_date
  ) THEN 'booked'
  ELSE 'free'
END result

:arrive_date:depart_date 替换为您将作为参数传递的日期。

参见demo。

大佬总结

以上是大佬教程为你收集整理的在不包括两个日期的情况下使用 BETWEEN 条件全部内容,希望文章能够帮你解决在不包括两个日期的情况下使用 BETWEEN 条件所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。