在条款中的条件。如果条件仅与条件

时间:2016-12-19 08:20:21

标签: sql oracle

是否可以在where子句中使用case来过滤select语句。 对于Eg:

Select * from table_name 
where source ='UHC'
and 
to_char(termdate,'YYYYMM') <= '201603';

但我希望第二个过滤条件仅在政策编号为&#39; 1&#39;时才有效。对于Eg:

case when policy_number = '1' then to_char(termdate,'YYYYMM') <= '201603';

如果策略编号不是1,那么只有1st where子句可以工作,但如果策略编号为1,那么where子句都应该工作。 我希望我的情况清楚。

1 个答案:

答案 0 :(得分:2)

你根本不需要案件:

Select * from table_name 
where source ='UHC'
and ((policy_number = '1' and to_char(termdate,'YYYYMM') <= '201603') 
     or nvl(policy_number, '0') != '1');

案件条件如下:

where source ='UHC' and case when policy_number = '1' then to_char(termdate,'YYYYMM') else '000000' end <= '201603');

在其他地方你需要的东西总是小于'201603'。这里的另一个问题是你为什么要将数字作为变量进行比较?这真的是你需要的吗?