在整理資料的時候,將不同欄位合併,可以透過||
完成,但需要將同欄位的資料進行切割,則需要透過connect by
來完成。
CONNECT BY
是 Oracle SQL 中用來執行階層查詢的語法(樹狀關係):
START WITH
:定義樹的根節點或起始節點CONNECT BY PRIOR
:定義父子節點關係,PRIOR
表父層值SYS_CONNECT_BY_PATH
:顯示從根到當前節點的路徑LEVEL
:目前在樹狀結構中的階層,根節點 LEVEL
為 1,子節點 LEVEL
為 2...PRIOR
:指定遞迴方向,前一層的列NOCYCLE
:確保數據中不會無限循環ORDER SIBLINGS BY
:可以在同一層級內對結果進行排序SELECT
column1, column2, ..., LEVEL
,SYS_CONNECT_BY_PATH
(column2, '->') AS pathFROM
table_nameSTART WITH
condition [父節點定義]CONNECT BY
NOCYCLE
PRIOR
parent_column = child_column [遞迴關係定義]ORDER
column1 BY
column2
;
-- 一拆多範例
select REGEXP_SUBSTR('01#02#03#04', '[^#]+', 1, rownum) as newport
from dual
;
-- output
01
select REGEXP_SUBSTR('01#02#03#04', '[^#]+', 1, rownum) as newport
from dual
connect by rownum <= REGEXP_COUNT('01#02#03#04', '[^#]+')
;
-- output
01
02
03
04
select REGEXP_SUBSTR('AB#1VG#2GH#3', '.{4}', 1, rownum) as newport
from dual
connect by level <= (length('AB#1VG#2GH#3') / 4)
;
-- output
AB#1
VG#2
GH#3
SELECT X + LEVEL
FROM (
SELECT 0 X
FROM DUAL
)
CONNECT BY LEVEL <= 10
;
-- output
1
2
3
4
5
6
7
8
9
10