我似乎有这个SQL查询的问题:
SELECT * FROM appts
WHERE timeStart >='$timeStart'
AND timeEnd <='$timeEnd'
AND dayappt='$boatdate'
时间格式为军事时间.物流是租船可以在早上7点至下午1点至下午1点或上午9点至下午5点预订.如果在该范围内有appt,它应该返回appts,但事实证明它不一致.如果我选择上午9点直到下午1点,它将忽略从早上7点开始的应用程序,即使它在上午9点到下午1点重叠.如果我选择9到5,它将返回任何内容,即使它应该在早上7点到下午1点.如何创建包含从timeStart到timeEnd的整个范围的SQL语句,包括那些重叠的?
解决方法:
正确的检查将如下所示:
SELECT * FROM appts
WHERE timeStart <='$timeEnd'
AND timeEnd >='$timeStart'
AND dayappt='$boatdate'
已经给出了其他很好的解释,但我会继续更新它,并用我自己想象的方式替代解释.大多数人都在寻找每个可能的重叠,考虑到两个时间段,他们试图考虑可以使约会重叠的开始和结束的每个组合.我认为这是因为两个时间段不重叠,由于某种原因对我来说更容易.
说我正在检查的时间段是今天,我想找到今天不重叠的任何时间段.实际上只有两种情况,即时间段在今天之后开始(PeriodStart> EndOfToday)或时间段在今天之前结束(PeriodEnd< StartOfToday).
鉴于我们有一个不重叠的简单测试:
(PeriodStart> EndOfToday)或(PeriodEnd< StartOfToday)
快速翻转,你有一个简单的重叠测试:
(PeriodStart< = EndOfToday)AND(PeriodEnd> = StartOfToday)
-Shane