oracle 两以逗号分割字符串是否包含相同字符串解决思路

oracle 两以逗号分割字符串是否包含相同字符串如题:例如:str11,2,35,3str22,3 则为true总之,将str1

oracle 两以逗号分割字符串是否包含相同字符串
如题:
   例如:str1='1,2,35,3'
         str2='2,3' 则为true
         总之,将str1以逗号分割,然后将str2以逗号分割,两个字符串只要其中的一个字符是一样的,就返回true,否则返回false。SQL该怎么实现? 
        
[解决办法]
if (str1 like '%'
[解决办法]
str2
[解决办法]
'%') or (str2 like '%'
[解决办法]
str1
[解决办法]
'%') then
--true
else
--false
end if;
[解决办法]

先建一个分割函数,后续你自己处理
create or replace type type_split as table of varchar2(100);  --创建一个  type  ,如果为了使split函数具有通用性,请将其size 设大些。
--创建function
create 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;

[解决办法]
WITH TEST AS (
SELECT '1,2,35,3' AS STR1,'2,3' AS STR2 FROM DUAL
UNION ALL
SELECT '1,2,35,3' AS STR1,'4,6,8' AS STR2 FROM DUAL
)

SELECT STR1, STR2, DECODE(FLG, 0, 'TRUE', 'FALSE') AS RESULT
  FROM (SELECT INSTR(TRANSLATE(REPLACE(STR1, ','),
                               REPLACE(STR2, ','),
                               'XXXXXXXXXX'),
                     'X') AS FLG,
               STR1,
               STR2
          FROM TEST)

--------------------------------------------
11,2,35,32,3FALSE
21,2,35,34,6,8TRUE
31,2,35,3,84,6,8FALSE
------解决方案--------------------


select decode(count(*),0,'false','true') i_f from (
  select regexp_substr('2,3','\d+',1,level) s1
   from dual connect by level <= (select length(regexp_replace('2,3','\d+'))+1 from dual)
    intersect
  select regexp_substr('1,2,35,3','\d+',1,level) s1
   from dual connect by level <= (select length(regexp_replace('1,2,35,3','\d+'))+1 from dual)
)