SQL 多条件查询
来源:互联网 发布:百世汇通打单软件 编辑:程序博客网 时间:2024/04/30 08:29
我们在做查询的时候,输入参数,查询结果。如果参数在1-5个 就要写32个IF语句。 IF的计算公式就是2的N次方 如果超过10个参数以上就是有1024以上个IF,这样写死的心都有了。
但是我们也可以通过另一种很变通的方法来做到
case when
select * from a
select * from a where name=name (name是 a表的字段)
这两个语句的查询结果是一样的
所以我们可以用以下的做法来做多条件查询
declare
@start_effdate varchar(20),
@end_effdate varchar(20),
@start_part varchar(20),
@end_part varchar(20),
@tr_site varchar(20),
@tr_trnbr varchar(20),
@tr_loc varchar(20),
@start_date varchar(20),
@end_date varchar(20),
@tr_serial varchar(20),
@ptp_buyer varchar(20)
set @start_effdate='2008-03-12'
set @end_effdate='2008-03-12'
set @start_part='A'
set @end_part='Z'
set @tr_site='2000,3000,5000'
set @tr_trnbr=''
set @tr_loc=''
set @start_date='2008-03-12'
set @end_date='2008-03-12'
set @tr_serial=''
set @ptp_buyer=''
declare @spilt varchar(100),
@spilt1 varchar(100),
@spilt2 varchar(100)
set @spilt=substring(@tr_site,1,4)
set @spilt1=substring(@tr_site,6,4)
set @spilt2=substring(@tr_site,11,4)
if(len(@start_part)<0 or @start_part='') and (len(@end_part)<0 or @end_part='')
begin
select * from dbo.invmis_last_view where tr_site in (@spilt,@spilt1,@spilt2)
and tr_trnbr=case when len(@tr_trnbr)<0 or @tr_trnbr='' then tr_trnbr else @tr_trnbr end
and tr_loc=case when len(@tr_loc)<0 or @tr_loc='' then tr_loc else @tr_loc end
and tr_serial=case when len(@tr_serial)<0 or @tr_serial='' then tr_serial else @tr_serial end
and ptp_buyer=case when len(@ptp_buyer)<0 or @ptp_buyer='' then ptp_buyer else @ptp_buyer end
and tr_effdate between convert(varchar(10),convert(datetime,@start_effdate),120) and convert(varchar(10),convert(datetime,@end_effdate),120)
and tr_date between convert(varchar(10),convert(datetime,@start_date),120) and convert(varchar(10),convert(datetime,@end_date),120)
end
else if(len(@start_part)>0 or @start_part<>'') and (len(@end_part)<0 or @end_part='')
begin
select * from dbo.invmis_last_view where tr_site in (@spilt,@spilt1,@spilt2)
and tr_trnbr=case when len(@tr_trnbr)<0 or @tr_trnbr='' then tr_trnbr else @tr_trnbr end
and tr_loc=case when len(@tr_loc)<0 or @tr_loc='' then tr_loc else @tr_loc end
and tr_serial=case when len(@tr_serial)<0 or @tr_serial='' then tr_serial else @tr_serial end
and ptp_buyer=case when len(@ptp_buyer)<0 or @ptp_buyer='' then ptp_buyer else @ptp_buyer end
and tr_effdate between convert(varchar(10),convert(datetime,@start_effdate),120) and convert(varchar(10),convert(datetime,@end_effdate),120)
and tr_date between convert(varchar(10),convert(datetime,@start_date),120) and convert(varchar(10),convert(datetime,@end_date),120)
and tr_part like @start_part+'%'
end
else if(len(@start_part)<0 or @start_part='') and (len(@end_part)>0 or @end_part<>'')
begin
select * from dbo.invmis_last_view where tr_site in (@spilt,@spilt1,@spilt2)
and tr_trnbr=case when len(@tr_trnbr)<0 or @tr_trnbr='' then tr_trnbr else @tr_trnbr end
and tr_loc=case when len(@tr_loc)<0 or @tr_loc='' then tr_loc else @tr_loc end
and tr_serial=case when len(@tr_serial)<0 or @tr_serial='' then tr_serial else @tr_serial end
and ptp_buyer=case when len(@ptp_buyer)<0 or @ptp_buyer='' then ptp_buyer else @ptp_buyer end
and tr_effdate between convert(varchar(10),convert(datetime,@start_effdate),120) and convert(varchar(10),convert(datetime,@end_effdate),120)
and tr_date between convert(varchar(10),convert(datetime,@start_date),120) and convert(varchar(10),convert(datetime,@end_date),120)
and tr_part like @end_part+'%'
end
else if(len(@start_part)>0 or @start_part<>'') and (len(@end_part)>0 or @end_part<>'')
begin
select * from dbo.invmis_last_view where tr_site in (@spilt,@spilt1,@spilt2)
and tr_trnbr=case when len(@tr_trnbr)<0 or @tr_trnbr='' then tr_trnbr else @tr_trnbr end
and tr_loc=case when len(@tr_loc)<0 or @tr_loc='' then tr_loc else @tr_loc end
and tr_serial=case when len(@tr_serial)<0 or @tr_serial='' then tr_serial else @tr_serial end
and ptp_buyer=case when len(@ptp_buyer)<0 or @ptp_buyer='' then ptp_buyer else @ptp_buyer end
and tr_effdate between convert(varchar(10),convert(datetime,@start_effdate),120) and convert(varchar(10),convert(datetime,@end_effdate),120)
and tr_date between convert(varchar(10),convert(datetime,@start_date),120) and convert(varchar(10),convert(datetime,@end_date),120)
and tr_part between @start_part and @end_part
end
- SQL多条件查询
- SQL 多条件查询
- SQL 多条件查询
- sql 多条件查询
- SQL多条件查询
- SQL 多条件查询
- Sql多条件查询
- SQL多条件查询,模糊查询,模糊多条件查询
- 多条件查询的sql
- 多条件查询SQL语句
- SQL多条件查询语句
- 多条件查询SQL语句
- 多条件查询(Sql拼接)
- sql多条件查询语句
- sql语句多条件查询
- 条件查询&SQL查询
- SQL多条件查询Sql语句
- Sql多条件查询,子查询,in及分页查询
- 文隽博客
- 关于上司的那点事
- 疑情别恋15
- 自己写的一个链表应用程序
- 怎么防电脑辐射
- SQL 多条件查询
- 浅蓝深蓝
- 在开发板上实现了Java虚拟机kvm
- 网球王子国语
- Fedora 8 在线升级Yum源
- 孙泰英
- 射雕英雄传27
- 第十届中韩歌会
- 两女子地铁亲吻视频