oracle拆分字串並查詢
阿新 • • 發佈:2019-01-01
樣例sql:
select gro.*,
regexp_substr(group_name, '[^/]+', 1, 1) as one_group,
regexp_substr(group_name, '[^/]+', 1, 2) as two_group,
regexp_substr(group_name, '[^/]+', 1, 3) as three_group,
cfg.address as address
from app_wam_cfg_group gro
left join (select dbms_lob.substr(wm_concat(office.address)) address,
grop.id
from app_wam_cfg_group grop, app_wam_cfg_office office
where office.id in
(select regexp_substr(grop.work_address_id,
'[^,]+',
1,
rownum)
from dual
connect by rownum <=
length(grop.work_address_id) -
length(replace(grop.work_address_id, ',')) + 1 )
group by grop.id) cfg on cfg.id = gro.id
最內層的sql作用為根據將組合id拆分成id的一個集合,可以使用in關鍵字進行處理;
首先以正則進行字串擷取,因為regexp_substr的第4個引數為分隔組的第幾位,由於是不確定的,所以後面通過connect by 來限制分隔組有幾個,通過字串的長度,去掉分隔符,獲取長度大小。
倒數第二層則通過wm_concat函式進行合併,dbms_lob.substr函式將clob轉換成varchar.
最外一層則為關聯