본문 바로가기
개발하는 '정'/DB

ORACLE 문자열 자르기 / 정규식 / 공백처리

by 주앤정_블로그 2023. 11. 6.
ORACLE 문자열 자르기 / 정규식 / 공백처리

ORACLE에서 정규식을 이용하여 문자열을 자르는 방법

 

REGEXP_SUBSTR
SELECT '10|20||40|50' STR
    , REGEXP_SUBSTR('10|20||40|50','[^|]+',1,1) STR1
    , REGEXP_SUBSTR('10|20||40|50','[^|]+',1,2) STR2
    , REGEXP_SUBSTR('10|20||40|50','[^|]+',1,3) STR3
    , REGEXP_SUBSTR('10|20||40|50','[^|]+',1,4) STR4
    , REGEXP_SUBSTR('10|20||40|50','[^|]+',1,5) STR5
FROM DUAL

 

ORACLE 문자열 자르기

REGEXP_SUBSTR을 사용하여 문자열을 구분할 수 있다.

* REGEXP_SUBSTR( 문자열, [^구분자], 구분자 시작 위치, 구분자 순서)

 

 

REGEXP_SUBSTR 정규식을 사용할 경우 빈값을 주의해야한다.

빈값은 아래 예시처럼 구분자 사이에 값이 없는 경우를 말한다.

ORACLE 정규식 REGEXP_SUBSTR

위 사진에서 보다시피

구분자 사이에 값이 없는 경우 NULL로 출력되는게 아니라, 그 다음 순서에 해당하는 값을 가져온다.

 

나의 경우, REPLACE와 TRIM 함수를 사용해서 해결했다.

SELECT '10|20||40|50' STR
    , REPLACE('10|20||40|50','|',' | ') REPLACE_STR
    , TRIM(REGEXP_SUBSTR(REPLACE('10|20||40|50','|',' | '),'[^|]+',1,1)) REGEXP_STR1
    , TRIM(REGEXP_SUBSTR(REPLACE('10|20||40|50','|',' | '),'[^|]+',1,2)) REGEXP_STR2
    , TRIM(REGEXP_SUBSTR(REPLACE('10|20||40|50','|',' | '),'[^|]+',1,3)) REGEXP_STR3
    , TRIM(REGEXP_SUBSTR(REPLACE('10|20||40|50','|',' | '),'[^|]+',1,4)) REGEXP_STR4
    , TRIM(REGEXP_SUBSTR(REPLACE('10|20||40|50','|',' | '),'[^|]+',1,5)) REGEXP_STR5
FROM DUAL

ORACLE 정규식으로 문자열 자르기

REPLACE를 사용해서 구분자 사이에 강제로 스페이스를 입력했다.

그다음 REGEXP_SUBSTR 정규식으로 문자열을 분리한 후

TRIM으로 강제로 입력한 공백을 지웠다.

 

구분자를 입력할 때에는 0과 같은 임의의 값을 넣는 습관을 들여야겠다.

 

 

 

반응형

 

반응형

댓글