1. 주요 사용 목적
- 문자열의 검색과 치환
- 특정 패턴의 문자열 추출
- 입력 데이터의 유효성 검사
예를 들어, 이메일 주소 형식이 올바른지 검사하거나, 전화번호에서 숫자만 추출할 때 사용한다.
2. Oracle에서의 정규식 관련 함수
(1) REGEXP_LIKE
- 패턴과 일치하는 데이터를 검색한다.
SELECT *
FROM employees
WHERE REGEXP_LIKE(first_name, '^A.*'); -- A로 시작하는 이름 검색
(2) REGEXP_SUBSTR
- 패턴에 맞는 부분 문자열을 추출한다.
SELECT REGEXP_SUBSTR('Hello World', '[A-Za-z]+')
FROM dual; -- 첫 번째 단어 추출
(3) REGEXP_REPLACE
- 패턴에 맞는 부분을 다른 문자열로 치환한다.
SELECT REGEXP_REPLACE('010-1234-5678',
'([[:digit:]]{3})-([[:digit:]]{4})-([[:digit:]]{4})',
'(\1)\2-\3')
FROM dual;
(4) REGEXP_INSTR
- 패턴과 일치하는 위치(index) 를 반환한다.
SELECT REGEXP_INSTR('Hello World', 'World')
FROM dual;
3. 자주 사용되는 정규식 패턴
(1) 메타문자
기호의미
| ^ | 문자열의 시작 |
| $ | 문자열의 끝 |
| . | 임의의 한 문자 |
| * | 앞 문자가 0회 이상 반복 |
| + | 앞 문자가 1회 이상 반복 |
| ? | 앞 문자가 0회 또는 1회 발생 |
(2) 문자 클래스
표현식의미
| [abc] | a, b, c 중 하나 |
| [^abc] | a, b, c를 제외한 문자 |
| [0-9] | 숫자 0부터 9 |
| [a-z] | 소문자 알파벳 |
| [A-Z] | 대문자 알파벳 |
(3) POSIX 문자 클래스
표현식의미
| [:digit:] | 숫자 [0-9] |
| [:alpha:] | 알파벳 [a-zA-Z] |
| [:alnum:] | 알파벳 또는 숫자 [a-zA-Z0-9] |
| [:space:] | 공백 문자 |
4. 실습 예제
(1) 이메일 유효성 검사
SELECT email
FROM employees
WHERE REGEXP_LIKE(email, '^[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,4}$');
이 패턴은 아이디@도메인.확장자 형식을 검사한다.
(2) 전화번호 형식 변환
SELECT REGEXP_REPLACE('010-1234-5678',
'(^[0-9]{3})-([0-9]{4})-([0-9]{4}$)',
'(\1) \2-\3') AS formatted_phone
FROM dual;
- ^[0-9]{3} : 시작부터 3자리 숫자
- [0-9]{4} : 중간 4자리
- [0-9]{4}$ : 마지막 4자리로 끝
- \1, \2, \3 : 각 그룹을 참조
(3) 문자열에서 숫자만 추출
SELECT REGEXP_REPLACE('ABC123DEF456', '[^0-9]', '') AS numbers_only
FROM dual;
[^0-9]는 숫자가 아닌 모든 문자를 의미하며, 이를 빈 문자열로 바꿔 숫자만 남긴다.
5. 주의사항
- 정규식은 대소문자를 구분한다.
- 복잡한 패턴은 쿼리 성능에 영향을 줄 수 있다.
- Oracle 버전에 따라 지원하는 정규식 기능이 다를 수 있다.
'DBMS > 개념' 카테고리의 다른 글
| 27_ DCL (Data Control Language) (0) | 2025.11.01 |
|---|---|
| 26_ 트리거(TRIGGER) 정리 (0) | 2025.10.30 |
| 24_ DBMS 심화 주제 (0) | 2025.10.26 |
| 23_ CASE문 (0) | 2025.10.24 |
| 22_ CTE (Common Table Expressions) (0) | 2025.10.22 |