Oracle中SYS_CONNECT_BY_PATH函數的妙用 ;


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

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM