获得两次之间的记录

时间:2015-08-11 06:43:23

标签: sql sql-server sql-server-2008

您好我有一张包含两个时间列[StartTime][EndTime]

的表格

表记录包含StartTime 07:00EndTime 13:30

如果用户选择@StartTime = 09:00@EndTime = 11:00

,我想要撤消记录

SELECT * FROM TBL WHERE [StartTime] >= '09:00' AND [EndTime] <= '11:00'

不会返回任何记录。

我的查询怎么办?

2 个答案:

答案 0 :(得分:2)

如果我理解了您的问题,那么您正在寻找与查询范围重叠的行。您可以使用以下范例来查找重叠:

where [StartTime] <= @EndTime
and [EndTime] >= @StartTime

请考虑以下插图:

MATCHING ROWS

Query:     |----------------------------------|
                      |----|  
   |-----------------------|
                      |-----------------------------|
   |------------------------------------------------|

NON-MATCHING ROWS

Query:     |----------------------------------|
   |---|
                                                    |----|

请注意,在每个匹配的情况下,结束时间在查询开始时或之后,开始时间在查询结束时或之前。

答案 1 :(得分:1)

试试这个

SELECT * FROM TBL 
WHERE  
('09:00' between [StartTime] AND [EndTime]) or ('11:00' between [StartTime] AND [EndTime])