使用SQL查找重叠间隔

时间:2011-01-27 12:33:10

标签: sql

我想从表中提取行,其间隔与查询中指定的间隔相交。假设我有一个简单的ID, DATE_START, DATE_END表和两个查询参数P_DATE_STARTP_DATE_END,表达查询的最简单方法是什么,以便找到[DATE_START, DATE_END]的所有行至少有一个共同元素[P_DATE_START, P_DATE_END]


更新

为了使预期结果更清晰,请在下面找到输入值和预期结果的列表。 Colums是DATE_START, DATE_END, P_DATE_START, P_DATE_END, MATCH

16, 17, 15, 18, YES
15, 18, 16, 17, YES
15, 17, 16, 18, YES
16, 18, 15, 17, YES
16, 17, 18, 19, NO
18, 19, 16, 17, NO

3 个答案:

答案 0 :(得分:7)

更简单:

SELECT id, date_start, date_end 
FROM thetable 
WHERE date_start <= p_date_end 
AND date_end >= p_date_start

答案 1 :(得分:3)

根据您的dbms,您可以使用OVERLAPS运算符。

select * from your_table
where (date '2011-01-15', date '2011-01-18') overlaps (date_start, date_end)

答案 2 :(得分:2)

SELECT id,date_start,date_end         来自thetable         哪里没有(date_end&lt; p_date_start         或者p_date_end&lt; date_start)