zoukankan      html  css  js  c++  java
  • 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.结果如图

    
    
  • 相关阅读:
    zjnu1725 COCI (类似二维树状数组模拟)
    zjnu1730 PIRAMIDA(字符串,模拟)
    hdu5365Shortest Path (floyd)
    表达式的转换 (模拟题)
    zjnu1709 UZASTOPNI (bitset,树形dp)
    zjnu1707 TOPOVI (map+模拟)
    zjnu1716 NEKAMELEONI (线段树)
    zjnuSAVEZ (字符串hash)
    codeforces 55D. Beautiful numbers (数位dp)
    TP5将入口文件放在Public中,能得到那些安全保障?
  • 原文地址:https://www.cnblogs.com/lvanka/p/13030865.html
Copyright © 2011-2022 走看看