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

Sql 如何比较一行中的重叠值?,sql,mysql,overlap,Sql,Mysql,Overlap,我似乎对此SQL查询有问题: SELECT * FROM appts WHERE timeStart >='$timeStart' AND timeEnd <='$timeEnd' AND dayappt='$boatdate' 从应用程序中选择* 其中timeStart>=“$timeStart” 而timeEnd正确的检查如下所示: SELECT * FROM appts WHERE timeStart <='$timeEnd' AND timeEnd >

我似乎对此SQL查询有问题:

SELECT * FROM appts 
WHERE timeStart >='$timeStart' 
AND timeEnd <='$timeEnd' 
AND dayappt='$boatdate'
从应用程序中选择*
其中timeStart>=“$timeStart”

而timeEnd正确的检查如下所示:

SELECT * FROM appts 
WHERE timeStart <='$timeEnd' 
AND timeEnd >='$timeStart' 
AND dayappt='$boatdate'
从应用程序中选择*
其中timeStart=“$timeStart”
和dayapp='$boatdate'
已经给出了其他很好的解释,但我会继续,并用另一种解释来更新它,说明我自己是如何想象这一点的。大多数人都在寻找每一个可能的重叠,考虑到两个时间段,他们都在试图考虑可以使约会重叠的开始和结束的每个组合。我认为这两个时间段什么时候不重叠,出于某种原因,这对我来说比较容易

假设我检查的时间段是今天,我想找到今天没有重叠的任何时间段。实际上只有两种情况,一种是时间段从今天之后开始(PeriodStart>EndOfToday),另一种是时间段在今天之前结束(periodsend 考虑到我们有一个不重叠的简单测试:
(PeriodStart>EndOfToday)或(PeriodEnd

快速翻转,您可以进行简单的重叠测试:
(PeriodStart=startofday)


-谢恩

我想你需要手术室


SELECT * FROM appts 
WHERE (timeStart >='$timeStart' 
OR timeEnd <='$timeEnd')
AND dayappt='$boatdate'
SELECT * FROM appts 
WHERE (timeStart >='$timeStart' 
OR timeEnd <='$timeEnd')
AND dayappt='$boatdate'
假设每个记录只关心特定的一天。
i、 e.租用的船只行驶时间不超过1天。

沙卡尔佩什回答了这个问题:


我想你需要一个手术室


SELECT * FROM appts 
WHERE (timeStart >='$timeStart' 
OR timeEnd <='$timeEnd')
AND dayappt='$boatdate'
SELECT * FROM appts 
WHERE (timeStart >='$timeStart' 
OR timeEnd <='$timeEnd')
AND dayappt='$boatdate'
如果搜索范围在09:00-13:00之间的约会,Shahkalpesh的(简化)查询将变为:

SELECT * FROM Appointments
    WHERE (timeStart >= '09:00' OR timeEnd <= '13:00')

我们看到,它还选择了第1、2和3行,但拒绝了第4行(因为timeStart>13:00')、第5行(因为timeEnd<09:00')和第6行(因为timeStart>13:00')。此表达式是一个原型示例,说明如何选择“重叠”的行,将“相遇”和“相遇者”(例如,请参见“”)计算为重叠。更改“>=”和“谢谢Shane、Shahkalpesh和Jonathan


我实际上忽略了Shane“交换”变量的事实(我还在使用TimeStask.这是经过几次测试后工作的。谢谢!你是对的,我真的不认为我应该考虑或考虑它只关注一天,而不是几天。现在我想起来了,这是有道理的。谢谢!这完全是错误的。”ShanEd是正确的。例如,这将在05点之间挑选出一个预订:00和06:00,因为实际结束时间少于您询问的任何结束时间。出于同样的原因,它还将从18:00开始收取租金。@Jonathan:您能用数据和输入参数单独发布一封回复,并提供预期的输出吗?@netrox:您能检查ShaneD提供的SQL是否按照您的预期工作吗?另外,如果我发布的内容有任何错误,请告诉我。谢谢。谢谢Jonathan的详细回复。而且,你的一些假设是正确的,就像我一样(我们的假设不同)。如果OP能准确地说出他需要什么,那就太好了。谢谢netrox和Jonathan。请不要匆忙接受答案。另外,定义输入和预期输出以正确理解问题。@Shahkalpesh-我同意,用示例输入和所需输出清晰地定义问题会有很大帮助。通常,这意味着这个问题不需要再问了,甚至因为它变得很明显。答案没有被匆忙接受,被接受的答案是正确的。我在下面的评论中注意到,对于为什么这个问题是用基于和的解决方案写的,而存在基于和的解决方案,我的答案只是基于和的解决方案RDBMS更容易优化查询,通常会生成更高效的查询计划。