sql – 如何比较一行中的重叠值?

我似乎有这个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

上一篇:c – 使小部件在Qt布局中部分重叠


下一篇:底部导航视图与RecyclerView的最后一项重叠