小编典典

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

sql

我似乎对此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语句?


阅读 206

收藏
2021-04-28

共1个答案

小编典典

正确的检查如下所示:

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

2021-04-28