首页 文章

case where子句与列Like条件

提问于
浏览
1

我在函数内部使用SQL查询 . 现在我想将参数值传递给SQL where子句,如果param_value不是空的,如下所示 .

select * 
  from cms_tab 
 where case when param_val <> '' then 
         col1 like '%' || param_val || '%' 
       end

怎么做到这一点?

如果参数值不为null,那么我想使用like(%)获取记录 .

2 回答

  • 1

    试试这个:

    select * from cms_tab 
    where 
    param_val is null
     or col1 like '%'||param_val||'%'
    
  • -1

    在Oracle中检查字符串是否为"empty"的唯一安全方法是检查它是否 IS [NOT] NULL ; here您找到了一个问题示例,您可以在检查"empty strings"错误的方式时找到这些问题 .

    此外, CASE 不是这里的正确选择;你最好添加一些布尔逻辑 .

    如果我理解的话,你想要在参数为“空”时选择所有行,或者如果参数不是“空”则只选择匹配的行;这可能是一种方式:

    create or replace procedure testNull ( param_val IN varchar2) is
        vCount number;
    begin
        select count(*)
        into vCount
        from cms_tab
        where param_val is null
           or col1 like '%' || param_val || '%' ;
        dbms_output.put_line('vCount = ' || vCount);
    end;
    

    Test:

    create table cms_tab(col1) as (
        select 'xxx ABC yyy' from dual union all
        select 'xxxxxxxxxxxx' from dual
        )
    
    SQL> exec testNull(null);
    vCount = 2
    
    PL/SQL procedure successfully completed.
    
    SQL> exec testNull('');
    vCount = 2
    
    PL/SQL procedure successfully completed.
    
    SQL> exec testNull('ABC');
    vCount = 1
    
    PL/SQL procedure successfully completed.
    
    SQL> exec testNull('ZZZ');
    vCount = 0
    
    PL/SQL procedure successfully completed.
    

相关问题