2012-12-12 127 views
4

可以说我的表如下。选择与某个日期重叠的日期范围

ID | Startdate   | Enddate 
----------------------------------------------- 
1 | 2012-12-12 08:00:00 | 2012-12-15 18:30:00 
----------------------------------------------- 
2 | 2012-12-11 00:00:00 | 2012-12-16 00:00:00 
----------------------------------------------- 
3 | 2012-12-16 08:00:00 | 2012-12-17 18:30:00 
----------------------------------------------- 
4 | 2012-12-13 00:00:00 | 2012-12-14 11:30:00 
----------------------------------------------- 

选定的日期范围为Id 1,2012-12-12 08:00:00至2012-12-15 18:30:00。 我想选择任何日期范围内的日期。

正确的ID将是2和4。 希望你们明白,如有问题请随时提问。 谢谢。

+0

你尝试过什么?我们将帮助您使用特定的代码,但SO不适合您为您编写代码。 – JaredMcAteer

+0

JaredMcAteer,感谢您的建议,我将展示我下次尝试的代码,对不起,这是我的第一篇文章。谢谢。 – Raywin

回答

2
select d1.* 
from 
    dates d1 inner join dates d2 
    on d2.id=1 and d1.Startdate<d2.Enddate and d1.Enddate>d2.Startdate 
where d1.id<>1 
+0

谢谢,我确实尝试过,但它获得ID 2,3,4。任何地方,谢谢你的尝试! – Raywin

+0

@ user1898109与您的示例数据,我得到2和4这是所有日期重叠的日期范围与id = 1。您接受的答案仅返回4 .... – fthiella

+0

Ops,抱歉,由于我自己的数据不同,我犯了错误。 – Raywin

1
SELECT t1.* 
FROM YourTable t1 
INNER JOIN 
(
    SELECT StartDate, EndDate 
    FROM YourTable 
    WHERE Id = 1 
) t2 ON t2.StartDate < t1.StartDate AND t2.EndDate > t1.EndDate