본문 바로가기

닷컴's_열공/Database

Oracle - Split 방식, 문자열의 세로 분리 - 참조

참조 사이트 : http://develop.sunshiny.co.kr/965




/*
 #############
 # 문자열 분리
 #############
 
 1) 정규식, CONNECT BY 를 이용 SPLIT 방식 분리
  > 구분자에 따라 문자 분리(새로 출력)
*/
WITH TT AS
    (
        SELECT '34,655,677,666.555' TX FROM DUAL
    )
    SELECT TRIM(REGEXP_SUBSTR(TX, '[^,]+', 1, LEVEL)) AS TX
        FROM TT
        CONNECT BY INSTR(TX, ',', 1, LEVEL - 1) > 0
;
 
TX
---------------------------
34
655
666
555E
---------------------------
 
 
/*
 2) 정규식, 기타 함수를 이용 SPLIT 방식 분리
 > 구분자에 따라 문자 분리(새로 출력)
*/
 WITH T AS
        (
         SELECT 'AAA,BBB,CCC,DDD.EEE'||',' AS TXT FROM DUAL -- 끝자리에 ||',' 추가
        )
        SELECT REPLACE(TXT, ',', '') AS TXT
         FROM   T
          MODEL
           RETURN UPDATED ROWS
           PARTITION BY(ROWNUM RN)
           DIMENSION BY (0 POSITION)
           MEASURES (TXT ,NVL(LENGTH(REGEXP_REPLACE(TXT,'[^,]+','')),0) NB_MOT)
           RULES
           (TXT[FOR POSITION FROM  1 TO NB_MOT[0] INCREMENT 1]
                = REGEXP_SUBSTR(TXT[0],'[^,]+',1,CV(POSITION)))
;            
 
TXT
---------------------------
AAA
BBB
CCC
DDD.EEE
---------------------------