我有一张这样的表:
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)
答案 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)