DB/ORACLE

ORACLE SUBSTR vs REGEXP_SUBSTR 차이점

devmean 2026. 3. 25. 10:24

문자열을 자를 때 SUBSTRREGEXP_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 중첩보다 직관적

반응형