sql - 选择datetime开始和停止之间以及停止之后的记录

时间:2014-07-28 09:21:37

标签: sql sql-server

我有一张这样的表:

id timestart            timestop 
1  2014-5-5 23:15:00    2014-5-5 23:17:00
2  2014-5-5 23:30:00    2014-5-5 23:45:00
3  2014-5-5 23:50:00    2014-5-5 23:55:00
4  2014-5-5 23:57:00    2014-5-6 00:05:00

我有select语句,它在timestart和timestop之间返回记录:

select *
from table
where ( timestart >= @start and timestop <= @stop)

如果@start ='2014-5-5 23:00:00'和@stop ='2014-5-5 23:59:00',选择将返回前三行。 我应该如何重写select语句以检索id = 4的行(在timestart之后有@start和在timestop之后有@stop的记录?

通过这个陈述,我得到了我想要的东西,但我不确定这是最好的方法:

... where 
    (timestart  >= @start and timestart <= @stop) and (timestop <= @stop or timestop >= @stop) 

2 个答案:

答案 0 :(得分:0)

从第二个查询中,您可以轻松推断出

where (timestart >= @start and timestart <= @stop) 

甚至

where (timestart BETWEEN @start and @stop) 

这是因为你的陈述的第二部分

where (timestart >= @start and timestart <= @stop) 
and (timestop <= @stop or timestop >= @stop) <---this will be true for all timestop entries

答案 1 :(得分:0)

试试这个:

where timestart BETWEEN ISNULL(@start,timestart) and ISNULL(@stop,timestart)