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

REGEXP_SUBSTR을 사용하여 문자열을 구분할 수 있다.
* REGEXP_SUBSTR( 문자열, [^구분자], 구분자 시작 위치, 구분자 순서)
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

REPLACE를 사용해서 구분자 사이에 강제로 스페이스를 입력했다.
그다음 REGEXP_SUBSTR 정규식으로 문자열을 분리한 후
TRIM으로 강제로 입력한 공백을 지웠다.
구분자를 입력할 때에는 0과 같은 임의의 값을 넣는 습관을 들여야겠다.
반응형
반응형
'개발하는 '정' > DB' 카테고리의 다른 글
ORACLE 이번달 마지막 날짜 구하기 (0) | 2024.08.05 |
---|---|
오라클 컬럼명을 자바 VO 변수 형식으로 출력 (0) | 2023.11.10 |
ORACLE 과거 데이터 조회, 복구 (백업) (0) | 2023.11.01 |
MariaDB Server 설치 (0) | 2023.09.05 |
MySql Workbench 설치 및 접속 (0) | 2023.08.08 |
댓글