在存储过程中传入一个字符串,其表示某主键的ID串,然后我需要分隔开这个字符串,查询语句中使用in来作为查询的条件语句1是这样的:
select t.b, count(1)
from t
where t.aID in ('''' || REPLACE('3,5,6', ',', ''',''') || '''')
group by t.b这样得到的结果是为空的可是通过 select '''' || REPLACE('3,5,6', ',', ''',''') || '''' from dual;得到的结果是'3','5','6';
而 select t.b, count(1)
from t
where t.aID in ('3','5','6')
group by t.b
确是有值的,为什么呢?aID的类型是varchar2语句1该怎么改造,才能得到值呢?
select t.b, count(1)
from t
where t.aID in ('''' || REPLACE('3,5,6', ',', ''',''') || '''')
group by t.b这样得到的结果是为空的可是通过 select '''' || REPLACE('3,5,6', ',', ''',''') || '''' from dual;得到的结果是'3','5','6';
而 select t.b, count(1)
from t
where t.aID in ('3','5','6')
group by t.b
确是有值的,为什么呢?aID的类型是varchar2语句1该怎么改造,才能得到值呢?
比如你传来的id串为'3,5,6',你可以把它变成',3,5,6,'
然后instr(',' || id || ',',inParam) > 0;
from t
where t.aID in
(
select replace(regexp_substr('3,5,6','[^,]+',1,level),',',' ') c1
from t1
connect by level<=length('3,5,6')-length(replace('3,5,6',',',''))+1
)
group by t.b
而非('3','5','6') 。你再做一步操作,把第一个'和最后一个'去掉即可。
可以查下instr函数的说明,就是一个字符串在另一个字符串出现的位置,如果该字符串没在另外字符串出现,也就是说不是另外一个的字串,返回值为0