我有一个带有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