오라클 정규식 질문드립니다 0 4 1,723

by 대한민국1 오라클 정규식 [2020.01.08 15:01:55]


오라클로 정규식을 활용하는 쿼리를 작성중에있는데

정규식을 보다보니까 regexp_substr를 이용하여 잘라서 로우단위로 자를수가 있는 정보를 발견하여 해보았습니다.

우선

select REGEXP_SUBSTR('1,2,3,4,5|6,7', '[^|]+', 1, level)
  from dual
connect by instr('1,2,3,4,5|6,7', '|', 1, level - 1) > 0;

이렇게 하면 1,2,3,4,5|6,7을 [1,2,3,4,5] 와 [6,7]로 자를 수 있었습니다.

하다가보니 1,2,3,4,5,|,6,7을 ,|, 세가지의 구분자로 [1,2,3,4,5] 와 [6,7]로 자르고 싶은데 어떻게 해야 하나요??

 

by 신이만든지기 [2020.01.08 16:16:40]
WITH
    TMP AS
        (SELECT 1 ID, '1,2,3,4,5|6,7' TXT FROM DUAL
         UNION ALL
         SELECT 2 ID, '1,2,3,4,5,|,6,7' TXT FROM DUAL
         UNION ALL
         SELECT 3 ID, '1,2,3|4,5,|,6,7' TXT FROM DUAL)
  SELECT A.ID
       , REGEXP_SUBSTR(A.TXT, '[0-9][0-9,]+[0-9]', 1, B.NO) STR
    FROM TMP A
       , (
                 SELECT LEVEL NO
                   FROM DUAL
             CONNECT BY LEVEL <= 100
         ) B
   WHERE B.NO <= LENGTH(A.TXT) - LENGTH(REPLACE(A.TXT, '|', '')) + 1
ORDER BY A.ID, B.NO;

 


by 대한민국1 [2020.01.08 16:49:42]

신이만든지기님 답변해주셔서 감사합니다.

TXT '1,2,3,4,5,|,6,7'에서 ,7을 제외하여 '1,2,3,4,5,|,6' 이 된다면 [1,2,3,4,5]와 [] 빈값이 나와서 6의 결과가 부재가 됩니다 ㅠㅠ


by 소주쵝오 [2020.01.08 16:47:24]
select trim(',' from regexp_substr('1,2,3,4,5,|,6,7', '[^|]+', 1, level))
from dual
connect by level <= regexp_count('1,2,3,4,5,|,6,7', '[|]') + 1
;

 


by 대한민국1 [2020.01.08 17:16:31]

소주쵝오님 답변해주셔서 감사합니다.

즐거운하루되세요 ^^ㅎㅎ

댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입