Oracle 中SYS_CONNECT_BY_PATH函數是非常重要的函數,下面就為您介紹一個使用SYS_CONNECT_BY_PATH函數的例子,實例如下:
數據准備:
1 create table test (a varchar2(10),b varchar2(10)); 2 3 INSERT INTO TEST (A, B) VALUES ('1', 'A'); 4 INSERT INTO TEST (A, B) VALUES ('1', 'B'); 5 INSERT INTO TEST (A, B) VALUES ('2', 'X'); 6 INSERT INTO TEST (A, B) VALUES ('2', 'Y'); 7 8 SELECT A, B FROM TEST ;

1 SELECT A, LTRIM(MAX(SYS_CONNECT_BY_PATH(B, ' ')), ',') B 2 FROM (SELECT B, A, ROW_NUMBER() OVER(PARTITION BY A ORDER BY B DESC) RN 3 FROM TEST) 4 START WITH RN = 1 5 CONNECT BY RN - 1 = PRIOR RN 6 AND A = PRIOR A 7 GROUP BY A;

------------------------------------------
將 'A,B,C,D,E,F,G'拆分成行顯示 ;
1 /* 2 1.分析先找出有多少個‘,’逗號:length(str) - length(regexp_replace(str, ',', '')) + 1 ; 3 2.再根據regexp_substr()函數進行查找逗號的位置 ; 4 regexp_substr(str, '[^,]+', 1, level, 'i') as str ,這里的level代表第幾個逗號(‘,’) 5 6 3.function REGEXP_SUBSTR(__srcstr, __pattern, __position, __occurrence, __modifier) ; 7 參數的含義: 8 __srcstr :需要進行正則處理的字符串 9 __pattern :進行匹配的正則表達式 10 __position :起始位置,從第幾個字符開始正則表達式匹配(默認為1) 11 __occurrence :標識第幾個匹配組,默認為1 12 __modifier :模式('i'不區分大小寫進行檢索;'c'區分大小寫進行檢索。默認為'c'。) 13 */ 14 15 with temp as 16 (select 'A,B,C,D,E,F,G' str from dual) 17 select regexp_substr(str, '[^,]+', 1, level, 'i') as str 18 from temp 19 connect by level <= length(str) - length(regexp_replace(str, ',', '')) + 1;
| 1 | A,B,C,D,E,F,G' |
| 1 | A |
| 1 | B |
| 1 | C |
| 1 | D |
| 1 | E |
| 1 | F |
