where beginTime<=@rq and isnull(endTime,getdate())>=@rq 
      and (endTime is null or (endTime-1)>=@rq)--其中begingTime:开始时间,endTime 结束时间(可能为空),@rq为一个传入的时间参数

解决方案 »

  1.   

    where (beginTime<=@rq and isnull(endTime,getdate())>=@rq )
          OR  (endTime is null or (endTime-1)>=@rq)这样?
      

  2.   

    --翻译一下你的代码,看一下是否符合你的业务逻辑;如果不符合,说出你想要的逻辑
    where beginTime<=@rq and isnull(endTime,getdate())>=@rq 
    and (endTime is null or (endTime-1)>=@rq)
    --翻译一下
    --如果endTime为null,则取 beginTime <= @rq <= getdate()之间的记录; 
    --如果endTime不为null,则取beginTime <= @rq <= getdate()-1天,之间的记录
      

  3.   


    如果是这个意思那也就是where endTime is null and beginTime<=@rq and @rq<=getdate() 
    union all
    where endTime is not null and beginTime<=@rq and @rq<=endTime-1?? 
      

  4.   

    哥,你这东西就变成where (beginTime<=@rq and isnull(endTime,getdate())>=@rq )
          or endTime is null 
          or (endTime-1)>=@rq了嘛,还是不是?
      

  5.   


    where beginTime<=@rq and isnull(endTime-1,getdate())>=@rq
    觉得跟这个差不多吧。
      

  6.   


    如果是这个意思那也就是where endTime is null and beginTime<=@rq and @rq<=getdate() 
    union all
    where endTime is not null and beginTime<=@rq and @rq<=endTime-1?? 

    对,翻译出来。是这个意思
      

  7.   

    where beginTime<=@rq and isnull(endTime,getdate())>=@rq        and (endTime is null or (endTime-1)>=@rq)   
    意思是开始时间小于传入的时间并且结束时间(当结束时间为空时,取当前时间)大于传入时间,并且结束时间为空或者结束时间