case where子句与列Like条件

时间:2017-02-17 07:40:07

标签: sql oracle sql-like

我在函数中使用SQL查询。现在我想将参数值传递给SQL where子句,前提是param_value不是空的,如下所示。

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

如何实现这一目标?

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

2 个答案:

答案 0 :(得分:2)

在Oracle中检查字符串是否为“空”的唯一安全方法是检查它是否<http:request-config name="American_HTTP_Request_Configuration" protocol="HTTP" host="localhost" port="8181" responseTimeout="300000" doc:name="HTTP Request Configuration"/> ; here你找到了一个问题的例子,你可以用错误的方式检查“空字符串”。

此外,IS [NOT] NULL不是正确的选择;你最好添加一些布尔逻辑。

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

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;    

答案 1 :(得分:-1)

试试这个:

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