SQL 정규 표현식 개요
오라클 데이터베이스는 SQL 문 내에서 복잡한 패턴 매칭과 데이터 검색을 가능하게 하는 강력한 정규 표현식 기능을 제공합니다. 이러한 기능을 통해 문자열 데이터의 유효성 검사, 데이터 추출, 변환 등 다양한 작업을 효율적으로 수행할 수 있습니다.
오라클 SQL 정규 표현식 연산자
오라클 SQL은 다양한 정규 표현식 연산자를 지원하며, 이를 통해 사용자는 원하는 패턴을 정의하고 검색할 수 있습니다. 주요 연산자는 다음과 같습니다.
- . (점): 임의의 단일 문자와 매칭됩니다.
- * (별표): 선행하는 문자가 0번 이상 반복되는 경우와 매칭됩니다.
- + (더하기): 선행하는 문자가 1번 이상 반복되는 경우와 매칭됩니다.
- ? (물음표): 선행하는 문자가 0번 또는 1번 나타나는 경우와 매칭됩니다.
- [] (대괄호): 문자 집합을 정의하며, 집합 내의 어떤 문자든 매칭됩니다.
- [^] (대괄호 + 캐럿): 문자 집합을 정의하며, 집합 내에 없는 문자와 매칭됩니다.
- | (파이프): 여러 패턴 중 하나와 매칭됩니다 (OR 조건).
- () (소괄호): 패턴을 그룹화하고 하위 표현식을 캡처합니다.
- ^ (캐럿): 문자열의 시작 부분과 매칭됩니다.
- $ (달러): 문자열의 끝 부분과 매칭됩니다.
정규 표현식 관련 SQL 함수
오라클은 정규 표현식을 활용할 수 있는 다양한 SQL 함수를 제공합니다.
- REGEXP_LIKE: 주어진 문자열이 특정 정규 표현식과 일치하는지 여부를 확인합니다.
- REGEXP_INSTR: 문자열 내에서 정규 표현식과 일치하는 부분의 시작 위치를 반환합니다.
- REGEXP_SUBSTR: 문자열 내에서 정규 표현식과 일치하는 하위 문자열을 추출합니다.
- REGEXP_REPLACE: 문자열 내에서 정규 표현식과 일치하는 부분을 다른 문자열로 대체합니다.
- REGEXP_COUNT: 문자열 내에서 정규 표현식과 일치하는 횟수를 반환합니다.
정규 표현식 활용 예시
REGEXP_LIKE를 사용한 이메일 주소 유효성 검사
다음 예제는 emails
테이블에서 유효한 이메일 주소만 선택합니다.
SELECT email
FROM emails
WHERE REGEXP_LIKE(email, '^[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,4}$');
이 쿼리는 기본 이메일 형식 (예: user@example.com
)을 따르는 이메일 주소만 반환합니다.
REGEXP_INSTR을 사용한 특정 패턴 위치 찾기
다음 예제는 descriptions
테이블에서 “Oracle”이라는 단어가 나타나는 위치를 찾습니다.
SELECT REGEXP_INSTR(description, 'Oracle', 1, 1, 0, 'i') AS oracle_location
FROM descriptions;
이 쿼리는 대소문자를 구분하지 않고 (‘i’ 플래그) description
컬럼에서 “Oracle” 단어가 처음 나타나는 위치를 반환합니다.
REGEXP_SUBSTR을 사용한 데이터 추출
다음 예제는 phone_numbers
테이블에서 국가 코드를 추출합니다 (예: +1-555-123-4567).
SELECT REGEXP_SUBSTR(phone_number, '\+[0-9]+') AS country_code
FROM phone_numbers;
이 쿼리는 전화 번호에서 ‘+’ 기호로 시작하고 그 뒤에 숫자가 1개 이상 오는 패턴을 찾아 추출합니다.
REGEXP_REPLACE를 사용한 문자열 대체
다음 예제는 addresses
테이블에서 모든 숫자를 ‘*’ 문자로 대체합니다.
SELECT REGEXP_REPLACE(address, '[0-9]', '*') AS masked_address
FROM addresses;
이 쿼리는 주소에서 모든 숫자를 ‘*’로 마스킹하여 개인 정보 보호를 강화합니다.
REGEXP_COUNT를 사용한 패턴 등장 횟수 계산
다음 예제는 text_data
테이블에서 특정 단어가 몇 번 나타나는지 셉니다.
SELECT REGEXP_COUNT(text, 'example') AS example_count
FROM text_data;
이 쿼리는 text
컬럼에서 “example” 단어가 몇 번 나타나는지 계산합니다.
정규 표현식 패턴 매칭 옵션
정규 표현식 함수에 매칭 옵션을 추가하여 매칭 동작을 세밀하게 조정할 수 있습니다.
i
: 대소문자를 구분하지 않습니다.c
: 대소문자를 구분합니다 (기본값).n
: 점(.)이 개행 문자와 매칭되도록 합니다.m
: 문자열을 여러 줄로 취급합니다.
오라클 SQL 정규 표현식의 장점 및 한계
장점:
- 복잡한 문자열 패턴 매칭 및 처리를 SQL 문 내에서 직접 수행 가능합니다.
- 데이터 품질 개선 및 데이터 분석 효율성을 높입니다.
한계:
- 복잡한 정규 표현식은 성능 저하를 유발할 수 있습니다.
- 정규 표현식 문법에 대한 이해가 필요합니다.
실무 팁
- 복잡한 패턴은 미리 테스트하여 정확성을 확보하십시오.
- 성능에 민감한 쿼리에서는 정규 표현식 사용을 최소화하십시오.
- 인덱스를 활용하여 정규 표현식 검색 성능을 향상시키십시오.
참고 자료
- Oracle Database SQL Language Reference: https://docs.oracle.com/en/database/oracle/oracle-database/latest/sqlrf/index.html