在带有空检查的where子句中的CASE

时间:2018-07-19 11:01:07

标签: sql oracle

我想从具有null和not null条件的表中返回行。当我用静态值将closdt列等同时,它可以工作,但不适用于case语句中的空值检查条件。 closdt是表sbm中的列

select * from sbm where
closdt  
case when :chk='Y' then 
  is null 
else 
  is not null 
end;

2 个答案:

答案 0 :(得分:3)

您可以使用一些布尔逻辑写条件:

bash>
bash> source del
-bash: del: line 6: syntax error: unexpected end of file
bash>
bash> cat del
if ( `uname` == Linux ) then
    echo "One"
else
    echo "Two"
endif
bash>

答案 1 :(得分:1)

没有显示出使用CASE表达式分解条件测试的方法。您可以使用CASE表达式生成要测试的值,如下所示:

select *
  from sbm
  where case
          when :chk = 'Y' AND closdt IS NULL THEN 1
          when :chk <> 'Y' AND closdt IS NOT NULL THEN 1
          else 0
        end = 1