반응형
오라클 데이터베이스에서 제공하는 REGEXP(정규 표현식 관련 함수)는 복잡한 문자열 패턴 매칭, 추출, 변환 작업을 효율적으로 수행할 수 있는 강력한 도구입니다. 이 글에서는 REGEXP 관련 주요 함수와 실무에서 활용할 수 있는 예제를 통해 REGEXP의 핵심 기능과 활용법을 알아보겠습니다.
1. 오라클에서 제공하는 REGEXP 함수
주요 함수 목록
함수 이름 설명
REGEXP_LIKE | 특정 패턴이 문자열과 일치하는지 확인 (Boolean 반환) |
REGEXP_INSTR | 패턴과 일치하는 부분의 시작 위치 또는 끝 위치 반환 |
REGEXP_SUBSTR | 문자열에서 패턴에 매칭된 부분 추출 |
REGEXP_REPLACE | 문자열의 패턴을 다른 값으로 변환 |
REGEXP_COUNT | 문자열에서 패턴이 매칭된 횟수 반환 |
2. REGEXP_LIKE: 문자열 패턴 일치 확인
기본 사용법
SELECT first_name
FROM employees
WHERE REGEXP_LIKE(first_name, '^A'); -- A로 시작하는 이름
예제
이메일 주소 유효성 검사
SELECT email
FROM users
WHERE REGEXP_LIKE(email, '^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$');
- 이메일 패턴: 알파벳, 숫자, 특수문자 조합 + "@" + 도메인
3. REGEXP_INSTR: 특정 패턴 위치 확인
기본 사용법
SELECT REGEXP_INSTR('Oracle Database', 'a', 1, 2) AS position
FROM dual;
- 'a'의 두 번째 발생 위치를 반환 (결과: 12)
예제
문자열에서 특정 패턴의 위치 찾기
SELECT REGEXP_INSTR('john.doe@example.com', '@', 1, 1) AS at_position
FROM dual;
- 결과: 10 (@의 위치)
4. REGEXP_SUBSTR: 문자열 추출
기본 사용법
SELECT REGEXP_SUBSTR('Oracle Database 19c', '[A-Za-z]+', 1, 2) AS second_word
FROM dual;
- 패턴 [A-Za-z]+에서 두 번째 매칭된 단어를 반환 (결과: Database)
예제
전화번호 형식 추출
SELECT REGEXP_SUBSTR('Call me at (123) 456-7890.', '\(\d{3}\) \d{3}-\d{4}') AS phone_number
FROM dual;
- 결과: (123) 456-7890
5. REGEXP_REPLACE: 문자열 변환
기본 사용법
SELECT REGEXP_REPLACE('123-456-7890', '-', '') AS clean_number
FROM dual;
- 결과: 1234567890
예제
이름 뒤 공백 제거
SELECT REGEXP_REPLACE('John ', '\s+$', '') AS trimmed_name
FROM dual;
- 결과: John
6. REGEXP_COUNT: 패턴 매칭 횟수 반환
기본 사용법
SELECT REGEXP_COUNT('banana', 'a') AS count_a
FROM dual;
- 결과: 3 (a가 3번 등장)
예제
문장에서 단어 개수 세기
SELECT REGEXP_COUNT('This is a test sentence.', '\b\w+\b') AS word_count
FROM dual;
- 결과: 5 (단어가 5개)
7. REGEXP 함수 실무 활용 예제
예제 1: 로그 데이터에서 에러 코드 추출
SELECT REGEXP_SUBSTR(log_message, 'ERROR \d+', 1, 1) AS error_code
FROM system_logs
WHERE REGEXP_LIKE(log_message, 'ERROR');
- 로그 메시지에서 ERROR와 뒤따르는 숫자 추출
예제 2: CSV 문자열 분리
SELECT REGEXP_SUBSTR('apple,banana,cherry', '[^,]+', 1, LEVEL) AS fruit
FROM dual
CONNECT BY REGEXP_SUBSTR('apple,banana,cherry', '[^,]+', 1, LEVEL) IS NOT NULL;
- 결과:
- apple
- banana
- cherry
예제 3: 특정 단어 강조 표시
SELECT REGEXP_REPLACE('Oracle is great for databases.', 'Oracle', '**Oracle**') AS highlighted_text
FROM dual;
- 결과: **Oracle** is great for databases.
8. 정규 표현식 패턴의 주요 요소
패턴 설명
^ | 문자열의 시작 |
$ | 문자열의 끝 |
. | 임의의 문자 한 개 |
* | 0개 이상 반복 |
+ | 1개 이상 반복 |
? | 0개 또는 1개 |
{n} | 정확히 n번 반복 |
{n,} | 최소 n번 반복 |
{n,m} | n번 이상, m번 이하 반복 |
[abc] | a, b, 또는 c 중 하나 |
[^abc] | a, b, 또는 c를 제외한 문자 |
\d | 숫자 (0-9) |
\w | 단어 문자 (알파벳, 숫자, _) |
\s | 공백 문자 |
9. REGEXP 사용 시 주의사항
- 성능 고려:
- REGEXP 함수는 문자열 매칭 과정에서 비교적 높은 비용이 발생할 수 있습니다.
- 대량 데이터 처리 시 인덱스를 활용하거나 WHERE 절에서 REGEXP 사용을 최소화하는 것이 좋습니다.
- 정확한 패턴 설계:
- 잘못된 패턴은 의도하지 않은 결과를 초래할 수 있으므로 테스트를 충분히 수행해야 합니다.
- 오라클 버전 확인:
- REGEXP 함수는 Oracle 10g 이상에서 지원됩니다. 일부 고급 기능은 최신 버전에서만 사용 가능합니다.
10. 결론
오라클의 REGEXP 함수는 데이터베이스 내 문자열 처리 및 분석 작업을 간소화하는 데 유용합니다. 복잡한 패턴을 단순화하고 실무에서 필요한 다양한 데이터 정제 및 검증 작업을 손쉽게 수행할 수 있습니다. 위의 예제와 패턴을 활용해 실무에서 REGEXP의 강력함을 직접 경험해 보세요!
반응형
'Database' 카테고리의 다른 글
오라클 SQL PATCH와 SQL PROFILE의 차이점 (0) | 2024.12.05 |
---|---|
오라클 AS OF 절로 과거 데이터 조회하기 (0) | 2024.12.05 |
오라클 데이터베이스의 LOB 관리 (0) | 2024.12.05 |
오라클 PL/SQL 블록 구조 이해하기 (0) | 2024.12.05 |
오라클 SQL TRACE와 TKPROF 활용법 (0) | 2024.12.04 |