我有一张带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.
我的问题是验证我的方法是否正确,或者是否有任何众所周知的算法来解决这个问题?
我很确定还有其他类似性质的问题。我想不出找到它们的正确关键字。
感谢。
答案 0 :(得分:0)
要检查一个范围是否与另一个范围相交,您可以使用以下谓词:
start < 10 AND end > 5