1. 程式人生 > >oracle之字符串拆分

oracle之字符串拆分

HERE loop num subst pan split ring 字符串拆分 limit

在工作當中發現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; BEGIN WHILE (V_START <= V_LENGTH) LOOP V_INDEX := INSTR(P_STRING, P_DELIMITER, V_START); IF V_INDEX = 0 THEN PIPE ROW(SUBSTR(P_STRING, V_START)); V_START := V_LENGTH + 1; ELSE PIPE ROW(SUBSTR(P_STRING, V_START, V_INDEX - V_START)); V_START :
= V_INDEX + 1; END IF; 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.*
                  FROM TABLE(SPLITSTR(Hello,Cnblogs!, ,
)) T)) A, (SELECT * FROM (SELECT ROWNUM RN, T.* FROM TABLE(SPLITSTR(Hello,Cnblogs!, ,)) T)) B WHERE A.RN = 1 AND B.RN = 2;

待補充測試結果

oracle之字符串拆分