컴퓨터일반/DB

[Oracle] 정규식(Regex)으로 문자열에서 숫자만 추출 & 제거하는 방법

G-Ryon 2026. 3. 24. 12:25

데이터 정제(Cleaning) 작업을 하다 보면 010-1234-5678 같은 연락처에서 하이픈(-)을 제거하고 숫자만 남기거나, 주소에서 번지수를 제외한 텍스트만 추출해야 하는 경우가 많습니다.

오라클의 REGEXP_REPLACE 함수를 사용하면 복잡한 REPLACE 중첩 없이 한 줄의 쿼리로 해결할 수 있습니다.


1. 기본 함수 구조: REGEXP_REPLACE

정규표현식을 지원하는 치환 함수입니다.

SQL
 
REGEXP_REPLACE(대상문자열, '패턴', '치환할문자')

2. 문자열에서 "숫자만" 추출하기

숫자가 아닌 모든 문자를 찾아 공백('')으로 치환하여 없애버리는 원리입니다.

  • 정규식 패턴: [^0-9] 또는 [^[:digit:]]
    • ^: 패턴의 시작 부분에서 사용되면 'NOT(부정)'을 의미합니다. 즉, 숫자가 아닌 것들을 의미하죠.

예제 쿼리:

SQL
 
SELECT 
    'ABC1234-5678-DEF' AS 원본,
    REGEXP_REPLACE('ABC1234-5678-DEF', '[^0-9]', '') AS 숫자만_추출
FROM DUAL;

결과: 12345678


3. 문자열에서 "숫자만" 제거하기 (문자만 남기기)

반대로 숫자(0-9)를 모두 찾아 공백으로 치환하여 없앱니다.

  • 정규식 패턴: [0-9] 또는 [[:digit:]]

예제 쿼리:

SQL
 
SELECT 
    '서울시 강남구 123-45' AS 원본,
    REGEXP_REPLACE('서울시 강남구 123-45', '[0-9]', '') AS 숫자_제거
FROM DUAL;

결과: 서울시 강남구 - (숫자만 쏙 빠진 상태)


4. 실무 응용: 특수문자까지 깔끔하게 제거하기

숫자와 한글/영문만 남기고 싶을 때는 어떻게 할까요?

숫자와 문자만 남기기 (특수문자 제거)

SQL
 
SELECT 
    REGEXP_REPLACE('Hello! 123@#$', '[^0-9a-zA-Z가-힣]', '') AS 결과
FROM DUAL;

결과: Hello123


5. 핵심 요약 표

목표 사용 패턴 설명
숫자만 추출 [^0-9] 숫자가 아닌 모든 문자를 제거
숫자만 제거 [0-9] 모든 숫자를 제거
영문/숫자만 유지 [^0-9a-zA-Z] 영문과 숫자가 아닌 나머지를 제거

팁: 대소문자 구분 및 성능

  • REGEXP_REPLACE는 일반 REPLACE보다 리소스를 더 많이 사용합니다. 데이터 양이 수백만 건 이상으로 매우 많다면 전처리 단계에서 정제하거나 실행 계획을 확인하는 것이 좋습니다.
  • 한글의 경우 가-힣 패턴을 사용하면 대부분의 완성형 한글을 필터링할 수 있습니다.