select decode
(
  length('1,2,3')-length('1,3'),
  length
  (
    translate
    (
      replace('1,2,3',','),
      replace('1,3',','),
      lpad(' ',length(replace('1,3',',')),' ')
    )
  ),
  0,
  1
)
from dual

解决方案 »

  1.   

    把 v_srcIDList一个字符一个字符的截取,再判断
    substr()
    instr()
      

  2.   

    CREATE OR REPLACE FUNCTION F_InIDList(
        v_srcIDList    VARCHAR2,   --形如:1,3
        v_dstIDList    VARCHAR2    --形如:1,2,3
    )
        return NUMBER 
    IS
        str varchar2(100);
        v_Result       NUMBER;
        
    BEGIN
        v_Result := 0;
        BEGIN
          ------------
          str:='
            select decode
            (
              length(:1)-length(:2),
              length
              (
                translate
                (
                  replace(:1,:3),
                  replace(:2,:3),
                  lpad(:4,length(replace(:2,:3)),:4)
                )
              ),
              0,
              1
            )
          from dual';      execute immediate str into v_Result using               
            a,b,a,',',b,',',' ',b,',',' ';            
          
          ------------v_Result := 1;  --谁能帮我实现这部分代码,谢谢!
        EXCEPTION
          WHEN OTHERS THEN
            v_Result := 0;
        END;
        return v_Result;
    END F_InIDList;
      

  3.   

    v_num_src number(2):=length(v_srcIDList);
    v_num_b number(1);
    for n1 in 1..v_num_src loop
    v_num_b=instr(v_dstIDList,substr(v_srcIDList,n1,1),1,1);
    if v_num_b =0 then
    exit;
    end loop;
      

  4.   


    to CodeMagic:
    谢谢!
    你的代码编译不通过啊正在试wylwyl1130的代码
      

  5.   

    to wylwyl1130
    谢谢!不过你可能理解错我的意思了如
    v_srcIDList字符串值为:12,145  它包含12和145两个数值
    v_dstIDList字符串值为:12,14566,145   它包含12、14566、145三个数值
    函数要实现的功能就是判断v_srcIDList包含的数值是否都在v_dstIDList包含的数值里面
      

  6.   

    ss=split(v_srcIDList,",")
    for i=0 to ubound(ss)
    if instr(v_des(srcIDList,ss(i))=0 then 
    return 0
    next
    呵呵只是不知道oracle中怎么写,相应的函数和语法怎么写。
    对了,知道相应的函数跟语法哪里有参考吗?
      

  7.   

    呵呵,我想实现的就是类似ASP中的SPLIT函数
    谢谢帮忙顶一把函数的参考,好像www.experts-change.com上可以找到还不错的,网址不知道有没有记错,现在在网吧,等回去找一下
      

  8.   

    DECLARE
        v_src           VARCHAR2(1000);
        v_dst           VARCHAR2(1000);    FUNCTION IfContain
        (
            i_src       IN  VARCHAR2 ,
            i_dst       IN  VARCHAR2
        )
        RETURN BOOLEAN
        IS
            v_ret       BOOLEAN;        TYPE t_array    IS VARRAY(100) OF VARCHAR2(100);        v_arr_src       t_array := t_array('');
            v_arr_dst       t_array := t_array('');        
    v_found BOOLEAN;

    FUNCTION StrToArray(i_str IN VARCHAR2) RETURN t_array

    IS 
         v_lst_pos       NUMBER;
            v_cur_pos       NUMBER;
    v_cnt NUMBER;
           v_arr        t_array := t_array('');
    BEGIN
    v_cur_pos  := 1;
    v_lst_pos :=1 ;
    v_cnt := 1;


            LOOP

    v_cur_pos := INSTR(i_str,',' , 1,v_cnt ) ;

    DBMS_OUTPUT.PUT_LINE ( 'v_cur_pos=' || v_cur_pos  );

    IF  v_cur_pos <= 0 THEN

    v_cur_pos := LENGTH(i_str);

    v_arr(v_cnt ) := SUBSTR( i_str , v_lst_pos  , v_cur_pos - v_lst_pos  + 1 );
    EXIT;

    ELSE

                v_arr.EXTEND;
                v_arr(v_cnt ) := SUBSTR( i_str , v_lst_pos  , v_cur_pos - v_lst_pos  );
                v_lst_pos   := v_cur_pos + 1 ;

    END IF;

    v_cnt  := v_cnt  + 1;

            END LOOP;

    RETURN v_arr;

    EXCEPTION WHEN OTHERS THEN
      DBMS_OUTPUT.PUT_LINE(SQLERRM);
      RETURN v_arr;
    END StrToArray;

        BEGIN       v_arr_src := StrToArray(i_src);
       v_arr_dst := StrToArray(i_dst);
       
       v_ret  := TRUE;
       
       <<loop2>>    
       FOR i IN 1..v_arr_src.COUNT LOOP
           v_found := FALSE;
       
       <<loop1>>
           FOR j IN 1..v_arr_dst.COUNT LOOP
           IF v_arr_src(i) = v_arr_dst(j) THEN
          v_found := TRUE;
      EXIT  loop1 ;
     ELSE
       END IF;  
       END LOOP;
       
          IF NOT v_found THEN
          v_ret := FALSE;
      EXIT loop2;
       END IF;
       
       END LOOP;
       

    RETURN v_ret;

            EXCEPTION WHEN OTHERS THEN
    DBMS_OUTPUT.PUT_LINE('error=*' || SQLERRM || '*');
                RETURN v_ret    ;
        END IfContain;BEGIN    v_src := 'a';
        v_dst := 'a';    IF IfContain(v_src,v_dst) THEN
            DBMS_OUTPUT.PUT_LINE('YES');
        ELSE
            DBMS_OUTPUT.PUT_LINE('NO');
        END IF;
    END;