看看下面的语句
select ename,sal,deptno
from emp
where empno in('7654,7698,7782,7788')
这个语句是错误的,因为DEPTNO是一个数值列,而此IN列表是一个字符串值,所以此SQL语句会失败。现在要将此字符串转换为用逗号分解的数值列表。使用如下语句可以达到目的。
select ename,sal,deptno
from emp
where empno in (
select
to_number(
rtrim(
substr(csv.emps,instr(csv.emps,',',1,pos)+1,instr(csv.emps,',',1,pos+1)-instr(csv.emps,',',1,pos))
,',')
)
from
(select ','||'7654,7698,7782,7788'||',' emps from t1) csv,
(select rownum pos from emp) iter
where iter.pos<=(length(csv.emps)-length(replace(csv.emps,',')))/length(',')-1
)
下面贴出来一些部分过程的结果,便于理解。
SQL> select emps,pos
2 from
3 (select ','||'7654,7698,7782,7788'||',' emps from t1) csv,
4 (select rownum pos from emp) iter
5 where iter