2011-02-15 28 views
0

我们有例如。以下表格如何在SQL Server中确定dateTime范围是否与另一个范围重叠

| ID | startDateTime  | endDateTime   | 
+----+---------------------+---------------------| 
| 1 | 2010-01-01 10:30:00 | 2010-01-01 11:00:00 | 
| 2 | 2010-01-01 10:30:00 | 2010-01-01 11:30:00 | 
| 3 | 2010-01-01 11:00:00 | 2010-01-01 11:30:00 | 
| 4 | 2010-01-01 11:00:00 | 2010-01-01 12:00:00 | 
| 5 | 2010-01-01 11:30:00 | 2010-01-01 12:00:00 | 
| 6 | 2010-01-01 10:30:00 | 2010-01-01 12:00:00 | 

我会例如。针对与

@startDateTime 2010-01-01 11:00:00 
@endDateTime 2010-01-01 11:30:00 

我要查询来获取以下ID:2,3,4,6

我的大脑是办法古怪产生正确的说法... :(

回答

3

你可以这样做

declare @T table (ID int, startDateTime datetime, endDateTime datetime) 

insert into @T values 
( 1 , '2010-01-01 10:30:00' , '2010-01-01 11:00:00'), 
( 2 , '2010-01-01 10:30:00' , '2010-01-01 11:30:00'), 
( 3 , '2010-01-01 11:00:00' , '2010-01-01 11:30:00'), 
( 4 , '2010-01-01 11:00:00' , '2010-01-01 12:00:00'), 
( 5 , '2010-01-01 11:30:00' , '2010-01-01 12:00:00') 

declare @startDateTime datetime 
declare @endDateTime datetime 


set @startDateTime = '2010-01-01 11:00:00' 
set @endDateTime = '2010-01-01 11:30:00' 

select * 
from @T 
where 
    startDateTime < @endDateTime and 
    endDateTime > @startDateTime 
+0

+1可能要使用> =和<=,这取决于您的'重叠'的条件 – sasfrog 2011-02-15 10:55:30