我想从表中提取行,其间隔与查询中指定的间隔相交。假设我有一个简单的ID, DATE_START, DATE_END
表和两个查询参数P_DATE_START
和P_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
答案 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)