select * from at   where  (Numbers='' or Ename='') or SwipeDateTime between '2011-10-01' and '2011-11-01'这个查询,如果括号里面的有值时就查询后面这段时间里面同时括号里面指定值的数据,如果没有值时,就查询后面这段时间里面的数据

解决方案 »

  1.   

     Numbers=isnull(null,Numbers)--如果条件为null时成立
     Ename=ISNULL(null,Ename)--如果条件为null时成立
     猜1个
      

  2.   

    大版,select * from at   where  Numbers='054' and
    如这样就查询054这段时间里面的值.
    如果是这样Numbers=''就查询SwipeDateTime between '2011-10-01' and '2011-11-01'这段时间所有的值,
      

  3.   

    这和时间没关系,时间总是一个固定条件,不管前面的那两个值是空串还是别的.
    只是,"括号里有值时,取括号里面指定值的数据",上面的查询语句对于这句话来说还差条件,即这两个值是什么.
    因此,此查询语句应为:
    declare @Numbers int,@ename varchar(10)
    set @Numbers=....
    set @ename=....select * from at 
    where (Numbers='' or Numbers=@Numbers) and(Ename='' or Ename=@Ename) 
    and SwipeDateTime between '2011-10-01' and '2011-11-01'
      

  4.   

    select * from at   
    where  
    (@Numbers='' or Numbers=@Numbers or Ename=@Ename and @Ename='') --全是或关系?
    and  
    SwipeDateTime between '2011-10-01' and '2011-11-01'
      

  5.   

    你的那两个列,是NULL还是空串?这要区分的.
    如果是NULL,则用 Numbers is null or Numbers='054'
    create table at(numbers varchar(10),ename varchar(10),swipedatetime datetime)
    insert into at select '054','','2011-10-25'
    go
    declare @Numbers varchar(10),@ename varchar(10)
    set @Numbers='054'
    set @ename=''select * from at 
    where (Numbers='' or Numbers=@Numbers) and(Ename='' or Ename=@Ename) 
    and SwipeDateTime between '2011-10-01' and '2011-11-01'
    /*
    numbers    ename      swipedatetime
    ---------- ---------- -----------------------
    054                   2011-10-25 00:00:00.000(1 行受影响)*/
    go
    drop table at
      

  6.   

    (Numbers='' or Numbers=@Numbers) and(Ename='' or Ename=@Ename)

    (@Numbers='' or Numbers=@Numbers or Ename=@Ename and @Ename='')
    不等价,这是两个不同列,猜楼主的需求,是要分别比较才对.