牛骨文教育服务平台(让学习变的简单)
博文笔记

oracle字符串截取函数

创建时间:2013-06-02 投稿人: 浏览次数:790
CREATE OR REPLACE FUNCTION fn_split1(p_str IN VARCHAR2, p_delimiter IN VARCHAR2,p_delimiter2 IN VARCHAR2)
 RETURN VARCHAR2
/*******************************************
 ***名称:fn_split1
 ***参数:p_str   入参
          p_delimiter 
          p_delimiter2
 ***author :by wuf 2013-06-01
 ***描述:截取p_str中第一次出现p_delimiter和在p_delimiter出现之后第一次出现p_delimiter2的之间的字符串
 ***如果在p_delimiter之后到字符串结束都没找到p_delimiter2串,则返回p_delimiter后所以的字符串
 ***SELECT fn_split1("2@@12345,3@@,5@@134802308","@@","@@") FROM dual ;返回:12345,3
 ********************************************/
IS
    j INT := 0;
    len INT := 0;
    len1 INT := 0;
    len2 INT := 0 ;
    str_split VARCHAR2(100) := "";
    c VARCHAR2(100) ;
BEGIN
    len := LENGTH (p_str);
    len1 := LENGTH (p_delimiter);
    len2 := LENGTH(p_delimiter2) ;
    j := INSTR(p_str,p_delimiter)+len1 ;
    IF j = len1 THEN
      RETURN NULL;
    END if ;
    IF j > len1 THEN
      c := SUBSTR(p_str,j,len2);
      IF c = p_delimiter2 THEN
        RETURN NULL;
      END if ;
      LOOP
        j := j + 1;
        c := SUBSTR(p_str,j,len2);
        IF c = p_delimiter2 THEN
           str_split := SUBSTR(p_str,INSTR(p_str,p_delimiter)+len1,j-INSTR(p_str,p_delimiter)-len1);
           EXIT;
        END IF ;
        IF j >= LEN THEN
           str_split := SUBSTR(p_str,INSTR(p_str,p_delimiter)+len1);
           EXIT;
        END IF;
      END LOOP ;
    END if ;
    RETURN str_split;
END fn_split1;

声明:该文观点仅代表作者本人,牛骨文系教育信息发布平台,牛骨文仅提供信息存储空间服务。