SQL 질문과 답변 게시판
여러분들 덕에 SQL의 많은 부분 도움을 많고 있습니다. ^^
with test as(
select 1 A ,'국어책<상>' B from dual union all
select 2 ,'영어수업<중>' from dual union all
select 3 ,'<우주>과학실험시간<상중하>' from dual
)
select r.B, substr(r.b, r.fpos , r.tpos - r.fpos+1) RESULT,
substr(r.b, r.fpos1 , r.tpos1 - r.fpos1+1) RESULT1,
substr(r.b, r.fpos2 , r.tpos2 - r.fpos1+1) RESULT2
from ( select a.* , REGEXP_INSTR(B,'<',1,1,0) fpos , REGEXP_INSTR(B,'>',1,1,0) tpos,
REGEXP_INSTR(B,'<',1,2,0) fpos1 , REGEXP_INSTR(B,'>',1,2,0) tpos1,
REGEXP_INSTR(B,'<',1,3,0) fpos2 , REGEXP_INSTR(B,'>',1,3,0) tpos2
from test a ) r
|
B |
RESULT |
RESULT1 |
RESULT2 |
|
국어책<상> |
<상> |
국 |
국 |
|
영어수업<중> |
<중> |
영 |
영 |
|
<우주>과학실험시간<상중하> |
<우주> |
<상중하> |
이런 결과가 나왔습니다.
2개 이상 <>이 존재할 때는 결과값이 정상적으로 나오는데 1개일 경우만 저런 식으로 나옵니다.
어떤 문제인지 궁금합니다.


r.fpos, r.fpos1 r.fpos2 가 0이아닐때만 substr 하시고 0이면 '' 처리 하시면 될듯 합니다.
(case when r.fpos = 0 then substr(r.b, r.fpos , r.tpos - r.fpos+1) end) RESULT,
(case when r.fpos1 = 0 then substr(r.b, r.fpos1 , r.tpos1 - r.fpos1+1) end) RESULT1,
(case when r.fpos2 = 0 then substr(r.b, r.fpos2 , r.tpos2 - r.fpos1+1) end) RESULT2