多条件查询SQL语句

时间:2021-07-02 05:39:36

今天遇到个问题:有个模糊查询,但是同时可能有多个条件,当然其中有的条件可能是空的.

开始的时候很自以为是的直接将几个查询条件用and连接了起来,结果在程序中一调用,根本查不到结果...

于是开始想到了空值的问题.

如果有的条件为空,怎么办呢?如何修改最终的查询语句?

1.对条件进行空值判断;

2.进行查询语句的字符串拼接.

基本信息表结构如下:

 

多条件查询SQL语句create   table  T_INFOCODE_NATURAL
多条件查询SQL语句(
多条件查询SQL语句 CDATE        
datetime   not   null ,     -- 出厂时间
多条件查询SQL语句
 FAC_NAME      varchar ( 50 not   null ,     -- 发货厂家
多条件查询SQL语句
 BATTERY_TYPE     varchar ( 20 ),         -- 电池型号
多条件查询SQL语句
 SEND_TYPE     varchar ( 20 ),         -- 发货类型
多条件查询SQL语句
 SEND_NUM     int ,             -- 检测数量
多条件查询SQL语句
 MAKE_MODE     varchar ( 20 ),         -- 制作方式
多条件查询SQL语句
 PRODUCE_MODE     varchar ( 20 ),         -- 生产方式
多条件查询SQL语句
 BATTERY_NUM     int ,             -- 电池组数量
多条件查询SQL语句
  [ YEAR ]          char ( 4 ),         --
多条件查询SQL语句
  [ MONTH ]      char ( 2 ),         --
多条件查询SQL语句
 TDATE         datetime ,         -- 日期
多条件查询SQL语句
 SEND_RULE     varchar ( 50 ),         -- 发货规则
多条件查询SQL语句
 SEND_CODE     varchar ( 12 ),         -- 发货组编号
多条件查询SQL语句
 BATTERY_SORT     varchar ( 20 ),         -- 电池类别(新添加)
多条件查询SQL语句
 PAGENUM     varchar ( 12 not   null ,     -- 条码号
多条件查询SQL语句
 FITTING_CODE     varchar ( 12 ),         -- 装配号
多条件查询SQL语句
 LINE_CODE     varchar ( 12 ),         -- 生产机号
多条件查询SQL语句
 FLAG         char ( 1 ),         -- 是否放行
多条件查询SQL语句
 REMARK         varchar ( 200 ),         -- 备注
多条件查询SQL语句
 OTHER         varchar ( 50 ),         -- 其他
多条件查询SQL语句
 BLANK_COL     varchar ( 50 ),         -- 空白列
多条件查询SQL语句
)
多条件查询SQL语句

 存储过程语句:

 

多条件查询SQL语句
多条件查询SQL语句
-- 存储过程,根据CDATE,FAC_NAME,BATTERY_TYPE,MAKE_MODE,PRODUCE_MODE,
多条件查询SQL语句
-- YEAR,MONTH,TDATE,PAGENUM几个字段来查询
多条件查询SQL语句
多条件查询SQL语句create proc pr_select_Natural
多条件查询SQL语句(
多条件查询SQL语句 @CDATE     datetime,
多条件查询SQL语句 @FAC_NAME    varchar(
50 ),
多条件查询SQL语句 @BATTERY_TYPE    varchar(
20 ),
多条件查询SQL语句 @MAKE_MODE    varchar(
20 ),
多条件查询SQL语句 @PRODUCE_MODE    varchar(
20 ),
多条件查询SQL语句 @YEAR        
char ( 4 ),
多条件查询SQL语句 @MONTH        
char ( 2 ),
多条件查询SQL语句 @TDATE        datetime,
多条件查询SQL语句 @PAGENUM    varchar(
12 )
多条件查询SQL语句)
多条件查询SQL语句
as
多条件查询SQL语句declare @strCDATE varchar(
100 )
多条件查询SQL语句declare @strFAC_NAME varchar(
100 )
多条件查询SQL语句declare @strBATTERY_TYPE varchar(
100 )
多条件查询SQL语句declare @strMAKE_MODE varchar(
100 )
多条件查询SQL语句declare @strPRODUCE_MODE varchar(
100 )
多条件查询SQL语句declare @strYEAR varchar(
100 )
多条件查询SQL语句declare @strMONTH varchar(
100 )
多条件查询SQL语句declare @strTDATE varchar(
100 )
多条件查询SQL语句declare @strPAGENUM varchar(
100 )
多条件查询SQL语句declare @strMAIN varchar(
500 )
多条件查询SQL语句
多条件查询SQL语句
set  @strCDATE  =   ' CDATE = @CDATE and  '
多条件查询SQL语句
set  @strFAC_NAME  =   ' FAC_NAME like  '' % '' +@FAC_NAME+ '' % ''  and  '
多条件查询SQL语句
set  @strBATTERY_TYPE  =   ' BATTERY_TYPE like  '' % '' +@BATTERY_TYPE+ '' % ''  and  '
多条件查询SQL语句
set  @strMAKE_MODE  =   ' MAKE_MODE like  '' % '' +@MAKE_MODE+ '' % ''  and  '
多条件查询SQL语句
set  @strPRODUCE_MODE  =   ' PRODUCE_MODE like  '' % '' +@PRODUCE_MODE+ '' % ''  and  '
多条件查询SQL语句
set  @strYEAR  =   ' YEAR like  '' % '' +@YEAR+ '' % ''  and  '
多条件查询SQL语句
set  @strMONTH  =   ' MONTH like  '' % '' +@MONTH+ '' % ''  and  '
多条件查询SQL语句
set  @strTDATE  =   ' TDATE = @TDATE and  '
多条件查询SQL语句
set  @strPAGENUM  =   ' PAGENUM like  '' % '' +@PAGENUM+ '' % ''  and '
多条件查询SQL语句
多条件查询SQL语句
if  ( @CDATE  =   null  )  set  @strCDATE  =   ''
多条件查询SQL语句
if  ( @FAC_NAME  =   null  )  set  @strFAC_NAME  =   ''
多条件查询SQL语句
if  ( @BATTERY_TYPE  =   null  )  set  @strBATTERY_TYPE  =   ''
多条件查询SQL语句
if  ( @MAKE_MODE  =   null  )  set  @strMAKE_MODE  =   ''
多条件查询SQL语句
if  ( @PRODUCE_MODE  =   null  )  set  @strPRODUCE_MODE  =   ''
多条件查询SQL语句
if  ( @YEAR  =   null  )  set  @strYEAR  =   ''
多条件查询SQL语句
if  ( @MONTH  =   null  )  set  @strMONTH  =   ''
多条件查询SQL语句
if  ( @TDATE  =   null  )  set  @strTDATE  =   ''
多条件查询SQL语句
if  ( @PAGENUM  =   null  )  set  @strPAGENUM  =   ''
多条件查询SQL语句
多条件查询SQL语句
set  @strMAIN  =   ' select 
多条件查询SQL语句
     CDATE         as  出厂时间,
多条件查询SQL语句     FAC_NAME     
as  发货厂家,
多条件查询SQL语句     BATTERY_TYPE    
as  电池型号,
多条件查询SQL语句     SEND_TYPE    
as  发货类型,
多条件查询SQL语句     SEND_NUM    
as  检测数量,
多条件查询SQL语句     MAKE_MODE    
as  制作方式,
多条件查询SQL语句     PRODUCE_MODE    
as  生产方式,
多条件查询SQL语句     BATTERY_NUM    
as  电池组数量,
多条件查询SQL语句     [YEAR]        
as  年,
多条件查询SQL语句     [MONTH]    
as  月,
多条件查询SQL语句     TDATE        
as  日期,
多条件查询SQL语句     SEND_RULE    
as  发货规则,
多条件查询SQL语句     SEND_CODE    
as  发货组编号,
多条件查询SQL语句     BATTERY_SORT    
as  电池类别,
多条件查询SQL语句     PAGENUM    
as  条码号,
多条件查询SQL语句     FITTING_CODE    
as  装配号,
多条件查询SQL语句     LINE_CODE    
as  生产机号,
多条件查询SQL语句     FLAG        
as  是否放行,
多条件查询SQL语句     REMARK        
as  备注,
多条件查询SQL语句     OTHER        
as  其他,
多条件查询SQL语句     BLANK_COL    
as  空白列
多条件查询SQL语句       from T_INFOCODE_NATURAL
多条件查询SQL语句    
where   '  + @strCDATE + @strFAC_NAME + @strBATTERY_TYPE + @strMAKE_MODE + @strPRODUCE_MODE
多条件查询SQL语句
     +  @strYEAR  +  @strMONTH  +  @strTDATE  +  @strPAGENUM
多条件查询SQL语句exec(@strMAIN)

 

后又想到更加简短的语句:

 

多条件查询SQL语句
多条件查询SQL语句
create   proc  pr_select_Natural
多条件查询SQL语句(
多条件查询SQL语句 
@CDATE    datetime ,
多条件查询SQL语句 
@FAC_NAME   varchar ( 50 ),
多条件查询SQL语句 
@BATTERY_TYPE   varchar ( 20 ),
多条件查询SQL语句 
@MAKE_MODE   varchar ( 20 ),
多条件查询SQL语句 
@PRODUCE_MODE   varchar ( 20 ),
多条件查询SQL语句 
@YEAR    char ( 4 ),
多条件查询SQL语句 
@MONTH    char ( 2 ),
多条件查询SQL语句 
@TDATE    datetime ,
多条件查询SQL语句 
@PAGENUM   varchar ( 12 )
多条件查询SQL语句)
多条件查询SQL语句
as
多条件查询SQL语句
declare   @strWhere   varchar ( 500 )
多条件查询SQL语句
if  (  @CDATE   =   null  ) 
多条件查询SQL语句 
set   @strWhere   =   @strWhere + '  and CDATE = ' +   @CDATE
多条件查询SQL语句
if  (  @FAC_NAME   =   null  ) 
多条件查询SQL语句 
set   @strWhere   =   @strWhere + '  and FAC_NAME like  '' % '' +@FAC_NAME+ '' % ''   '
多条件查询SQL语句
if  (  @BATTERY_TYPE   =   null  ) 
多条件查询SQL语句 
set   @strWhere   =   @strWhere + '  and BATTERY_TYPE like  '' % '' +@BATTERY_TYPE+ '' % '''
多条件查询SQL语句
if  (  @MAKE_MODE   =   null  ) 
多条件查询SQL语句 
set   @strWhere   =   @strWhere + '  and MAKE_MODE like  '' % '' +@MAKE_MODE+ '' % '''
多条件查询SQL语句
if  (  @PRODUCE_MODE   =   null  ) 
多条件查询SQL语句 
set   @strWhere   =   @strWhere + '  and PRODUCE_MODE like  '' % '' +@PRODUCE_MODE+ '' % '''
多条件查询SQL语句
if  (  @YEAR   =   null  ) 
多条件查询SQL语句 
set   @strWhere   = @strWhere +   '  and YEAR like  '' % '' +@YEAR+ '' % '''
多条件查询SQL语句
if  (  @MONTH   =   null  ) 
多条件查询SQL语句 
set   @strWhere   =   @strWhere + '  and MONTH like  '' % '' +@MONTH+ '' % '''
多条件查询SQL语句
if  (  @TDATE   =   null  ) 
多条件查询SQL语句 
set   @strWhere   =   @strWhere + '  and TDATE = @TDATE '
多条件查询SQL语句
if  (  @PAGENUM   =   null  ) 
多条件查询SQL语句 
set   @strWhere   =   @strWhere + '  and PAGENUM like  '' % '' +@PAGENUM+ '' % '''
多条件查询SQL语句 
多条件查询SQL语句
set   @strMAIN   =   ' select 
多条件查询SQL语句  CDATE  as 出厂时间,
多条件查询SQL语句  FAC_NAME  as 发货厂家,
多条件查询SQL语句  BATTERY_TYPE as 电池型号,
多条件查询SQL语句  SEND_TYPE as 发货类型,
多条件查询SQL语句  SEND_NUM as 检测数量,
多条件查询SQL语句  MAKE_MODE as 制作方式,
多条件查询SQL语句  PRODUCE_MODE as 生产方式,
多条件查询SQL语句  BATTERY_NUM as 电池组数量,
多条件查询SQL语句  [YEAR]  as 年,
多条件查询SQL语句  [MONTH] as 月,
多条件查询SQL语句  TDATE  as 日期,
多条件查询SQL语句  SEND_RULE as 发货规则,
多条件查询SQL语句  SEND_CODE as 发货组编号,
多条件查询SQL语句  BATTERY_SORT as 电池类别,
多条件查询SQL语句  PAGENUM as 条码号,
多条件查询SQL语句  FITTING_CODE as 装配号,
多条件查询SQL语句  LINE_CODE as 生产机号,
多条件查询SQL语句  FLAG  as 是否放行,
多条件查询SQL语句  REMARK  as 备注,
多条件查询SQL语句  OTHER  as 其他,
多条件查询SQL语句  BLANK_COL as 空白列
多条件查询SQL语句    from T_INFOCODE_NATURAL
多条件查询SQL语句 where 1=1 
'   + @strWhere
多条件查询SQL语句
exec ( @strMAIN )
多条件查询SQL语句

 

学习路漫漫,继续成长ing.....