CONNECT BY 를 문자 분리 0 2 4,823

by park1q [SQL Query] CONNECT BY [2010.10.06 11:14:51]


요~~앞에 누가 올리셔서 마농님이 해결해 주신것 같은데..
아래처럼 두개 이상의 ROW 에서는 말도 안되게..14개 ROW 가 나옵니다.
원하는 답은 6개의 ROW 만 출력되게 하는것인데..
의견 부탁 드립니다.


with t as
(SELECT '1.HAND HELD 2.WHEELED 3.AUTOMATIC DIFFUSION' param FROM dual
union all
select '4.AAA 5.BBB 6.CCCC DDDD' param FROM dual)
SELECT regexp_substr(regexp_replace(param, ' ([0-9])', '@\1'), '[^@]+', 1, level) v
  FROM t
CONNECT BY LEVEL <= LENGTH(param) - LENGTH(REGEXP_REPLACE(param, '[0-9]'))

원하는답
1.HAND HELD
2.WHEELED
3.AUTOMATIC DIFFUSION
4.AAA
5.BBB
6.CCCC DDDD
by park1q [2010.10.06 11:32:19]
질문 올리고 여기저기 찾아보니..
connect by level 은 반드시 dual 에서만 사용해야 된다는 사실을 알았네요.
따라서 dual 을 이용한 row 복제와 원래 테이블을 나눠서 아래와 같이 해결했습니다.

with t as
(SELECT '1.HAND HELD 2.WHEELED 3.AUTOMATIC DIFFUSION' param FROM dual
union all
select '4.AAA 5.BBB 6.CCCC DIFFUSION' param FROM dual)
select regexp_substr(regexp_replace(param, ' ([0-9])', '@\1'), '[^@]+', 1, num)
from t,
(select level as num
from dual
connect by level <= 40) n
where n.num <= LENGTH(param) - LENGTH(REGEXP_REPLACE(param, '[0-9]'))

by v상이v [2010.12.16 10:18:06]
반드시 dual 절에서만 사용하는건 아닙니다..
결과 row가 1개일 경우는 사용해도 무방합니다..

오클 QnA 중
http://www.gurubee.net/article/49001
이 페이지가 이해에 도움이 되실꺼 같습니다~
댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입