使用SQL查找重叠间隔
我想从表中提取行的间隔与查询中指定的间隔相交的行。假设我有一个简单的ID, DATE_START, DATE_END
表和两个查询参数P_DATE_START
和P_DATE_END
,表达查询的最简单方法是什么,以便我找到[DATE_START, DATE_END]
至少具有一个公共元素[P_DATE_START, P_DATE_END]
的所有行?使用SQL查找重叠间隔
更新:
为了使所期望的结果更清楚,请找输入值和预期结果下面的列表。 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
更简单:
SELECT id, date_start, date_end
FROM thetable
WHERE date_start <= p_date_end
AND date_end >= p_date_start
谢谢,我也试过这个。当[[date_start,date_end]`完全包含在`[p_date_start,p_date_end]`中时,这不起作用。 – 2011-01-27 12:43:16
SELECT ID,DATE_START,DATE_END FROM thetable 哪里都不(DATE_END < p_date_start OR p_date_end < DATE_START)
谢谢,那是我第一次尝试。它不能解决`[p_date_start,p_date_end]`完全包含在`[date_start,date_end]`中的问题。它们相交,但查询不返回。 – 2011-01-27 12:38:46
根据你的DBMS,你可能能够使用OVERLAPS操作员。
select * from your_table
where (date '2011-01-15', date '2011-01-18') overlaps (date_start, date_end)
http://stackoverflow.com/questions/143552/comparing-date-ranges/143568#143568 – 2011-01-27 13:19:24
@马丁:这似乎正是我要找的,谢谢!如果是的话,我会投票结束我自己的问题。 – 2011-01-27 13:24:02