我现在有一条查询问题是这样的:
假如一张表记录为
table
a  
1  
12 
现在查询条件为:a等于一个常量(如果a为空则查询出全部结果集,a不为空则查询满足等于这个常量的结果集)我这样写
select * from table where a like '%@a%'  @a为一常量
如果@a=空结果为
a
1
12
查出了所有结果,满足
而如果@a=1查询结果就为
a
1
12
显然不对。该怎么写好?

解决方案 »

  1.   

    select * from table where a like nvl(@a, '%');NVL( string1, replace_with)
    功能:如果string1为NULL,则NVL函数返回replace_with的值,否则返回string1的值。
      

  2.   

    没有明白,这种情况怎么发生的。
    like '%1%' ,怎么可能 结果会有 a?
      

  3.   


    select *
      from (select 'a' a
              from dual
            union all
            select '1' a
              from dual
            union all
            select '12' a from dual) t
     where upper(t.a) like '%'||upper(nvl('1', 'NA'))||'%'