본문 바로가기

Oracle/SQL Question

[퀴즈] 구분자로 데이터 나누기

문제> 아래와 같이 "|" 표시가 들어간 데이터가 있다.
이 데이터를 "|" 를 기준으로 행으로 데이터를 나타내고자 한다.
with tmp as (
    select 'aa|bbb|cccc' str from dual
    union all select 'dddd|eeeee|ff|ggg' from dual
)

select * from tmp;

결과는 아래와 같다.


아래와 같이 결과가 나오도록 해보자.

정답 트리플클릭 >
SELECT  REGEXP_SUBSTR(str,'[^|]+',1,LEVEL) str
FROM (select rownum SEQ, str from tmp)
CONNECT BY  CONNECT_BY_ROOT SEQ = SEQ
and LEVEL <= LENGTH(str) - LENGTH(REPLACE(str,'|')) + 1;