Oracle中兩個逗號分割的字符串 如何判斷是否其中有相同值


比如字段a='101,102,103';b='103,104,105';

進行判斷a和b是否有相同值;

1.先寫一個分割逗號函數,如下(V_STR需要分割的字符串,V_SPLITER是以什么方式分割如','等):

function splitString(v_str in varchar2, v_spliter in varchar2)
  return type_str_split
  pipelined is
  j    int := 0;
  i    int := 1;
  len  int := 0;
  len1 int := 0;
  str  varchar2(4000);
begin
  len  := length(v_str);
  len1 := length(v_spliter);

  while j < len loop
    j := instr(v_str, v_spliter, i);
  
    if j = 0 then
      j   := len;
      str := substr(v_str, i);
      pipe row(str);
    
      if i >= len then
        exit;
      end if;
    else
      str := substr(v_str, i, j - i);
      i   := j + len1;
      pipe row(str);
    end if;
  end loop;
  return;
end;

 注:關鍵字PIPELINED表明這是一個oracle管道函數,oracle管道函數的返回值類型必須為集合,在函數中,PIPE ROW語句被用來返回該集合的單個元

素,函數以一個空的RETURN 語句結束,以表明它已經完成。

2.寫一個比較函數,調用剛剛的分割函數,對字符串進行比較:

--返回:0 => vStr2以','分割的某個字符不存在於vStr1,返回:1 => 則存在
function
compareString(vStr1 varchar2, --被比較的字符串(eg:101,102,103) vStr2 varchar2 --比較的字符串(eg:103,104,105) ) return number is mResult number; begin mResult := 0; for cur in (select * from table(splitStr(vStr2, ','))) loop if instr(',' || vStr1 || ',', ',' || cur.column_value || ',') > 0 then mResult := 1; return mResult; end if; end loop; return mResult; end;

3.結果如圖

 

 
       


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM