时间范围查询算法

时间:2018-01-30 01:24:23

标签: algorithm

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

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

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

感谢。

1 个答案:

答案 0 :(得分:0)

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

start < 10 AND end > 5