我在查询一个语句时候,需要根据时间来判断相应的标志来进行查询。
如select * from tab where sbz in (case when dtnum>'20000101' then '1' when dtnum>'20050101' then '2,3' end); 就是在判断条件的时候,有可能sbz字段需要有两个内容,即sbz in ('2','3').我通过SQL语句case when thenz来实现一个查询。可是通过以上方法,查询出来的数据都是无。 请那位高手告诉我很好的解决办法,只能用一条sql语句。
如select * from tab where sbz in (case when dtnum>'20000101' then '1' when dtnum>'20050101' then '2,3' end); 就是在判断条件的时候,有可能sbz字段需要有两个内容,即sbz in ('2','3').我通过SQL语句case when thenz来实现一个查询。可是通过以上方法,查询出来的数据都是无。 请那位高手告诉我很好的解决办法,只能用一条sql语句。
where (dtnum>'20000101' and sbz = '1') or
(dtnum>'20050101' and sbz in ('2','3'));
sbz in (select case when dtnum>'20000101' then '1'
when dtnum>'20050101' then '2'
else '3' end
from your_tab
);
select * from tab where dtnum>'20000101' or dtnum>'20050101'就可以实现你描述的需求.
SELECT *
FROM TAB
WHERE SBZ IN ('2','3');
SELECT *
FROM TAB
WHERE DTNUM > TO_NUMBER('20050101');
1. 首先,我这个查询关联到好几个表,sbz字段与dtnum字段并不在一个表内
2. 查询的时候,需要根据时间的区间来判断相应的sbz
3. 如果一个区间sbz只有一个值,那查询也很好查,通过case when then 能解决,我也不用写“in”了,直接用“=”好了
4. 问题是一个区间sbz有两个值,即又要等于2,又要等于3的。
---------- ---
1 a
2 b
3 c
5 f
4 eSQL> ed
已写入文件 afiedt.buf 1 select (case when a > 4 then 'a' when a > '3' then 'a,b,c' end ) "hhh" from a
2* where a = 4
3 ;hhh
-----
a,b,c
SQL> select * from a where b in
2 (select(
3 case when a > 4 then 'a'
4 when a > '3' then 'a,b,c'
5 end) "hhh"
6 from a where a = 4);未选定行隐身理解:SQL> select * from a where b in
2 ( select 'a,b,c' from dual);未选定行
SQL> select *
2 from a
3 where b in (select * from table(cast(Hf_StrList('a,b,c') as ht_strlist)));
A B
---------- ---
1 a
2 b
3 c
不知道我理解的对不对。