我似乎对此SQL查询有疑问:
SELECT * FROM appts WHERE timeStart >='$timeStart' AND timeEnd <='$timeEnd' AND dayappt='$boatdate'
时间格式为军事时间。物流是可以在早上7点至下午1点或晚上9点至下午1点或晚上9点至下午5点预订船租。如果该范围内有一个appt,则应返回appts,但事实证明它不一致。如果我选择上午9点至下午1点,即使它与上午9点至下午1点重叠,它也会忽略从上午7点开始的应用。如果我选择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