오라클
아래와 같이 구분자로 구분된 여러 항목이 들어 있는 문자열을 파싱하여 표 형태로 출력해 주는 쿼리 입니다.
EX) '1/1/W/101_1/2/H/201_1/3/H/301_2/3/H/501_3/4/H/601_4/5/H/701'
Row 구분자 : "_"
Column 구분자 : "/"
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | SELECT TD.RNUM , MAX(CASE WHEN TD.LV = 1 THEN TD.TXT ELSE NULL END) COL1 , MAX(CASE WHEN TD.LV = 2 THEN TD.TXT ELSE NULL END) COL2 , MAX(CASE WHEN TD.LV = 3 THEN TD.TXT ELSE NULL END) COL3 , MAX(CASE WHEN TD.LV = 4 THEN TD.TXT ELSE NULL END) COL4 FROM ( SELECT TB.RNUM, TC.LV ,regexp_substr(TB.TXT, '[^/]+', 1, TC.LV) TXT FROM ( SELECT rownum RNUM,regexp_substr(TA.TXT, '[^_]+', 1, LEVEL) TXT FROM (SELECT '1/1/W/101_1/2/H/201_1/3/H/301_2/3/H/501_3/4/H/601_4/5/H/701' TXT FROM dual) TA CONNECT BY LEVEL <= length(regexp_replace(TA.TXT, '[^_]+',''))+1 ) TB, (SELECT LEVEL LV FROM DUAL CONNECT BY LEVEL <= 4) TC ) TD GROUP BY TD.RNUM ORDER BY TD.RNUM ASC; | cs |
▶ 출력 결과
기타 문의 사항은 덧글로 부탁 드립니다.
'Database & Data > ORACLE' 카테고리의 다른 글
하나의 테이블에서 Merge Into 실행 (0) | 2020.03.21 |
---|---|
Oracle-xml 문자열을 테이블에 저장하기 입니다. (2) | 2016.09.25 |