문자열을 자를 때 SUBSTR과 REGEXP_SUBSTR은 용도가 다릅니다.
SUBSTR 특징
- 위치 기반으로 문자열을 자름
- 빠르고 성능이 좋음
- 단순한 문자열 처리에 적합
SELECT SUBSTR('abc123def', 4, 3) FROM DUAL;
결과: 123
REGEXP_SUBSTR 특징
- 패턴(정규식) 기반으로 문자열을 추출
- 복잡한 조건 처리 가능
- 상대적으로 성능이 느림
SELECT REGEXP_SUBSTR('abc123def', '[0-9]+') FROM DUAL;
결과: 123
차이 한눈에 정리
구분SUBSTRREGEXP_SUBSTR
| 기준 | 위치 | 패턴(정규식) |
| 사용 난이도 | 쉬움 | 어려움 |
| 성능 | 빠름 | 느림 |
| 활용 | 단순 자르기 | 복잡한 문자열 분석 |
언제 무엇을 써야 할까?
- 위치가 명확할 때 → SUBSTR
- 특정 패턴 기준 → REGEXP_SUBSTR
- 성능이 중요한 경우 → SUBSTR 우선 고려
5. SUBSTR로 되는데 REGEXP_SUBSTR을 쓰는 이유
이메일이나 공백 처리처럼 단순한 경우는 SUBSTR + INSTR로도 충분히 해결할 수 있습니다.
그럼에도 REGEXP_SUBSTR을 사용하는 이유는 더 유연하고 강력한 패턴 처리 때문입니다.
규칙이 일정하지 않은 데이터 처리
SELECT REGEXP_SUBSTR(email, '[^@]+') FROM DUAL;
@ 기준 앞 문자열 추출 (형식이 일정하지 않아도 대응 가능)
여러 패턴 중 원하는 값 추출
SELECT REGEXP_SUBSTR('abc123!@#456def789', '[0-9]+', 1, 1) FROM DUAL;
SELECT REGEXP_SUBSTR('abc123!@#456def789', '[0-9]+', 1, 2) FROM DUAL;
SELECT REGEXP_SUBSTR('abc123!@#456def789', '[0-9]+', 1, 3) FROM DUAL;
결과: 123
결과: 456
결과: 789
특정 패턴의 값까지 추출 가능
데이터 정제(클렌징)에 유리
데이터 정제란, 불규칙하고 지저분한 데이터를 분석 가능한 형태로 가공하는 과정을 의미합니다.
- 010-1234-5678
- 010 1234 5678
- 01012345678
- 전화번호: 010-1234-5678
이 경우 SUBSTR은 위치가 일정하지 않기 때문에 모든 케이스를 처리하기 어렵습니다.
반면 REGEXP_SUBSTR은 “숫자 패턴”만 기준으로 데이터를 추출할 수 있습니다.
SELECT REGEXP_SUBSTR('전화번호: 010-1234-5678', '[0-9]+') FROM DUAL;
결과: 010
또한 반복 호출을 통해 전체 숫자를 분리할 수도 있습니다.
SELECT REGEXP_SUBSTR('010-1234-5678', '[0-9]+', 1, 1) FROM DUAL; -- 010
SELECT REGEXP_SUBSTR('010-1234-5678', '[0-9]+', 1, 2) FROM DUAL; -- 1234
SELECT REGEXP_SUBSTR('010-1234-5678', '[0-9]+', 1, 3) FROM DUAL; -- 5678
가독성이 좋은 코드 작성
REGEXP_SUBSTR(col, '@(.+)', 1, 1, NULL, 1)
복잡한 SUBSTR 중첩보다 직관적
반응형
'DB > ORACLE' 카테고리의 다른 글
| ORACLE ORA-00257: archiver error 해결 방법 (0) | 2026.03.26 |
|---|---|
| ORACLE 문자열 자르기 (0) | 2026.03.25 |
| ORACLE 테이블 복사하기 (0) | 2026.03.24 |
| ORACLE WITH 절(서브쿼리 팩토링) 사용법 (0) | 2026.03.24 |
| ORACLE 프로시저 특정 문자열 검색 조회 (0) | 2025.03.27 |