问题:我在数据库的一个字段里存储的是'a,b,c'形式的值,但是当我在sql中使用in或者not in 来查询时,就遇到麻烦了。
解决方法,一个是在保存时就插入'a','b','c'形式的值,一个是写了一个存储函数来转换。虽然最终选择了第一种,但是觉得
有必要自己把这个存储函数记下来以便以后用到。
--把‘a,b,c’形式的值转成‘a’,'b','c'形式的值,以便在sql中使用in
function convertStr(v_in_str varchar2) return varchar2 is
ret_str varchar2(2000);
cursor c is
select c
from (with test as (select v_in_str c from dual)
select substr(t.ca,
instr(t.ca, ',', 1, c.lv) + 1,
instr(t.ca, ',', 1, c.lv + 1) -
(instr(t.ca, ',', 1, c.lv) + 1)) AS c
from (select ',' || c || ',' AS ca,
length(c || ',') -
nvl(length(REPLACE(c, ',')), 0) AS cnt
FROM test) t,
(select LEVEL lv from dual CONNECT BY LEVEL <= 2000) c
where c.lv <= t.cnt);
begin
ret_str := '';
for R in c loop
ret_str := ret_str||''''||R.c||''''||',';
end loop;
return substr(ret_str,0,length(ret_str)-1);
end;
可以进行测试,输入'a,b,c' 转换的结果是'a','b','c'