取第四个就是e4,,写一个通用的函数,测试编译时字符串 11;22;33;e4 中的数字自己都可以换成别的,函数里可以用str来表示里面的数字,分号可以用str2来表示等等,新人求指教啊!!!

解决方案 »

  1.   

    是啊,谢谢,但不是用instr和substr写一个简单的SQL语句,而是要写一个function函数,源字符串里的数字是可以变的,分号也可以变,用变量来代替,在测试时对应输入查看结果!谢谢!
      

  2.   


    create or replace function f_getchar
    (
        in_string              varchar2,            -- 原始字符串
        in_number              number,              -- 截取位数
        in_separator           varchar2             -- 分隔符
    )return varchar2
    as
        rt_string              varchar2(4000);
        str_basestring         varchar2(4000);
        int_charat             number;
    begin
        -- 截取位数不正确,返回空
        if (nvl(in_number, 0) <=0 ) then
            return rt_string;
        end if;    str_basestring := in_string || in_separator;    for i in 1..in_number
        loop
            int_charat := instr(str_basestring, in_separator);
            rt_string := substr(str_basestring, 1, int_charat - 1);
            str_basestring := substr(str_basestring, int_charat + 1);
        end loop;    return rt_string;
    exception
        when others then
            rt_string := sqlerrm;
            return rt_string;
    end f_getchar;
      

  3.   

    create or replace function test
    (
     str_in_var varchar2,  --字符串
     num_in_int integer,   --取第几个字符
     str_in_type varchar2  --分隔符
    ) return varchar2 is
      str_var varchar2(200);
      num_int1 integer;
      num_int2 integer;
      str_var2 varchar2(60);
    begin
      str_var :=str_in_type||str_in_var||str_in_type;
      num_int1 :=instr(str_var,str_in_type,1,num_in_int);
      num_int2 :=instr(str_var,str_in_type,1,num_in_int+1);
      
      str_var2 :=SUBSTR(str_var,num_int1+1,num_int2-num_int1-1);  return str_var2;
    end test;