select * from at where (Numbers='' or Ename='') or SwipeDateTime between '2011-10-01' and '2011-11-01'这个查询,如果括号里面的有值时就查询后面这段时间里面同时括号里面指定值的数据,如果没有值时,就查询后面这段时间里面的数据
解决方案 »
- 用降序聚集索引提高访问速度的问题
- 请高手看看,求一个SQL语句,稍微有些难吧!
- 来来来,老问题,新方案,高分求sql
- 数据库 可不可以到另一个服务器上?
- 散分200!vc在线正在进行网站压力测试,请大家帮忙登录论坛并保持链接,多谢大家!!!! 支持者有分!!!
- 数据库置疑~急啊很急啊
- sqlserver上有bool这个数据类型吗?
- 用sql实现,逻辑非的问题。
- 可以把数据库的表结构导出为表格(SQL SERVER 数据库) ?
- ACCESS 数据库 导入到 SQL SERVER 数据库时 原先类型为 自动编号 的 字段 被 转换成了 INT型,怎么解决这个问题
- 和数据库中int型多字段比较,如何求相似度
- 求助查错。。。sql语句写的没错,居然得不到正确结果!
Ename=ISNULL(null,Ename)--如果条件为null时成立
猜1个
如这样就查询054这段时间里面的值.
如果是这样Numbers=''就查询SwipeDateTime between '2011-10-01' and '2011-11-01'这段时间所有的值,
只是,"括号里有值时,取括号里面指定值的数据",上面的查询语句对于这句话来说还差条件,即这两个值是什么.
因此,此查询语句应为:
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'
where
(@Numbers='' or Numbers=@Numbers or Ename=@Ename and @Ename='') --全是或关系?
and
SwipeDateTime between '2011-10-01' and '2011-11-01'
如果是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
与
(@Numbers='' or Numbers=@Numbers or Ename=@Ename and @Ename='')
不等价,这是两个不同列,猜楼主的需求,是要分别比较才对.