有一表:ID Values
1 1,2,3
2 3,4
3 2,3
4 null
如何查询Values字段中1、2、3等这些值(如果存在的话)?
如:ID为1的Values中1、2、3这三个值,ID为2的3、4这两个值
因为往数据库里存的是多个值集合,中间用逗号分割开来。想查询的时候把这些值再分别提取出来。
1 1,2,3
2 3,4
3 2,3
4 null
如何查询Values字段中1、2、3等这些值(如果存在的话)?
如:ID为1的Values中1、2、3这三个值,ID为2的3、4这两个值
因为往数据库里存的是多个值集合,中间用逗号分割开来。想查询的时候把这些值再分别提取出来。
看你具体需求了
例如
select * from tab
where values like '%3,4%'
我只是举了一个例子,因为你不知道里面是否有哪些值。所以不能 like '%3,4%'我是想取出所有的值
create or replace type type_split as table of varchar2(50); --创建一个 type ,如果为了使split函数具有通用性,请将其size 设大些。--创建functioncreate or replace function split( p_list varchar2, p_sep varchar2 := ',') return type_split pipelined is l_idx pls_integer; v_list varchar2(50) := p_list;begin loop l_idx := instr(v_list,p_sep); if l_idx > 0 then pipe row(substr(v_list,1,l_idx-1)); v_list := substr(v_list,l_idx+length(p_sep)); else pipe row(v_list); exit; end if; end loop; return;end split;
如果取出来的结果作为主键再进行查询用,
可以在函数里面拼成('1','2','3')样子,
直接用 select t.* from test t
where t.key in ('1','2','3');
如果仅仅为了放到数组里面,能不在数据库里处理就不要在里面处理了吧。CREATE OR REPLACE FUNCTION GET_STRVALUE RETURN VARCHAR2 is
strReturn varchar2(1000) := '';
flg boolean :=true;
cursor aa_cur is
select t.b as b from aa t;
begin
for l_data in aa_cur loop
if l_data.b is not null then
if flg = true then
flg:=false;
strReturn := l_data.b;
else
strReturn := strReturn || ',' || l_data.b;
end if;
end if;
end loop;
return strReturn ;
EXCEPTION
WHEN OTHERS THEN
RETURN null;
end;