当前位置:首页 > 数据库 > Oracle

oracle之字符串拆分

 

在工作当中发现oracle没有提供字符串切割函数,在网上找到一个比好的切割方式,记录一下:

1.新建数据类型

            CREATE OR REPLACE TYPE STR_SPLIT AS TABLE OF VARCHAR2(500);

2.新建切割函数

            CREATE
            OR
            REPLACE
            FUNCTION
             SPLITSTR(P_STRING
  
            IN
            VARCHAR2
            , 

 P_DELIMITER 
            IN
            VARCHAR2
            ) 

 
            RETURN
             STR_SPLIT 

 PIPELINED 
            IS
             

 V_LENGTH 
            NUMBER := LENGTH(P_STRING); 

 V_START NUMBER :=1; 

 V_INDEX NUMBER; 

BEGINWHILE (V_START <= V_LENGTH) LOOP 

 V_INDEX := INSTR(P_STRING, P_DELIMITER, V_START); 

 IF V_INDEX =0THENPIPE ROW(SUBSTR(P_STRING, V_START)); 

 V_START := V_LENGTH +1; 

 ELSEPIPE ROW(SUBSTR(P_STRING, V_START, V_INDEX - V_START)); 

 V_START := V_INDEX +1; 

 ENDIF; 

 END LOOP; 

 RETURN; 

END SPLITSTR; 

3.进行测试

            select
            *
            from
            table(splitstr(Hello,Cnblogs!,,)); 

4.将行转为列显示

            SELECT
             A.COLUMN_VALUE V1, B.COLUMN_VALUE V2
  
            FROM (SELECT*FROM (SELECT ROWNUM RN, T.*FROMTABLE(SPLITSTR(Hello,Cnblogs!, ,)) T)) A,
       (SELECT*FROM (SELECT ROWNUM RN, T.*FROMTABLE(SPLITSTR(Hello,Cnblogs!, ,)) T)) B
 WHERE A.RN =1AND B.RN =2;

待补充测试结果

原文:https://www.cnblogs.com/jwangpip/p/9460847.html


【说明】本文章由站长整理发布,文章内容不代表本站观点,如文中有侵权行为,请与本站客服联系(QQ:254677821)!

相关教程推荐

其他课程推荐