时间范围查询算法



我有一个带有ID的表,开始和结束时间以毫秒为单位

ID Start End
1..0.....15
2..17....23
3..23....30
4..35....45

等等。

我有一个查询find records with range of 18 and 28.查询将选择时间范围涵盖查询时间范围的行。对于上述查询,record 2 and 3有效。

我的方法是

select * from table where
start between 18 and 28 or    // record 3 is selected
end between 18 and 28;        // record 2 is selected

这已经足够好了。

然后我还有另一种情况,find records with range of 5 to 10.

上面的查询不会返回任何内容。因此,我添加了一个额外的声明。

select * from table where
start between 5 and 10 or    
end between 5 and 10 or
(start < 5 and end > 10);    // record 1 is selected. 

我的问题是验证我的方法是否正确,或者是否有任何众所周知的算法可以解决这个问题?

我很确定还有其他类似性质的问题。我想不出找到它们的正确关键字。

谢谢。

若要检查一个范围是否与另一个范围相交,可以使用以下谓词:

start < 10 AND end > 5

最新更新