oracle之字符串拆分
阿新 • • 發佈:2018-08-11
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_STARTNUMBER := 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之字符串拆分