日期:2014-05-17  浏览次数:21461 次

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)

--------------------------------------------
1 1,2,35,3 2,3 FALSE
2 1,2,35,3 4,6,8 TRUE
3 1,2,35,3,8 4,6,8 FALSE
------解决方案--------------------