SQL 정규식 표현: 메타 문자, 리터럴 문자, 연산자 및 함수 활용
SQL에서 정규식(Regular Expressions, RegEx)은 문자열을 검색, 비교, 변환할 때 유용하게 사용됩니다.
특히 오라클(Oracle)과 SQL Server에서는 정규식을 활용하여 복잡한 문자열 패턴을 쉽게 다룰 수 있습니다.
이번 글에서는 정규식의 개념과 주요 연산자, 각 DBMS에서의 사용법을 샘플 예제와 함께 설명하겠습니다.
1. 정규식 표현 개요
정규식은 특정 패턴을 가진 문자열을 찾거나 변경하는 데 사용되는 문자열 표현 방식입니다.
예를 들어, 이메일 형식인지 검증하거나, 숫자만 포함된 문자열인지 확인하는 데 사용될 수 있습니다.
✔ 정규식의 주요 구성 요소
- 메타 문자(Meta Characters) → 특정 기능을 수행하는 기호(^, $,. 등)
- 리터럴 문자(Literal Characters) → 문자 그대로 매칭되는 일반 문자 (A-Z, 0-9, abc 등)
- 정규식 연산자 → 패턴을 확장하거나 반복(|, *, +, {} 등)
- 정규식 조건과 함수 → 오라클과 SQL Server에서 정규식을 처리하는 함수
2. 메타 문자 (Meta Characters)와 사용 예제
메타 문자는 특별한 의미를 가지는 문자로, 특정 조건에 맞는 문자열을 찾는 데 사용됩니다.
메타 문자 | 설명 | 예제 (찾을 패턴) | 매칭되는 문자열 |
. | 임의의 문자 한 개 | c.t | cat, cut, cet |
^ | 문자열의 시작 | ^A | Apple, Air (A로 시작) |
$ | 문자열의 끝 | end$ | weekend, friend (end로 끝남) |
* | 0개 이상의 반복 | go* | g, go, goo, gooo |
+ | 1개 이상의 반복 | go+ | go, goo, gooo |
? | 0개 또는 1개 존재 | colou?r | color, colour |
{n,m} | 최소 n개, 최대 m개 반복 | a{2,4} | aa, aaa, aaaa |
[abc] | 괄호 안의 문자 중 하나 | [cm]at | cat, mat |
[^abc] | 괄호 안의 문자 제외 | [^cm]at | bat, rat |
\d | 숫자 (0-9) | \d+ | 123, 45678 |
\w | 알파벳 + 숫자 | \w+ | hello123, world_1 |
✔ 예제: ^[A-Z]\w+
- 설명: 대문자로 시작하는 단어를 찾음
- 매칭되는 문자열: "Hello", "Oracle", "SQL"
- 매칭되지 않는 문자열: "hello", "123abc"
3. 리터럴 문자 (Literal Characters) - 오라클 & SQL Server
리터럴 문자는 그 자체로 해석되는 문자로, 단순 문자열 검색에 사용됩니다.
정규식에서 메타 문자(^, $,. 등)를 일반 문자로 사용하려면 백슬래시(\)를 붙여야 합니다.
✔ 예제: \. → 마침표(.)를 포함한 문자열 찾기
- 패턴: example\.com
- 매칭되는 문자열: "www.example.com", "my.example.com"
- 매칭되지 않는 문자열: "www_example_com"
🔹 오라클(Oracle)에서 리터럴 문자 사용하기
SELECT * FROM Users WHERE REGEXP_LIKE(Email, 'example\.com');
✅ example.com을 포함한 이메일 주소만 조회
🔹 SQL Server에서 리터럴 문자 사용하기
SELECT * FROM Users WHERE Email LIKE '%example.com';
✅ LIKE 연산자를 활용하여 특정 문자열 포함 여부 확인
4. ^ (Caret) 연산자 - 문자열 시작 확인
^ 연산자는 문자열이 특정 문자로 시작하는지 확인할 때 사용됩니다.
✔ 예제: ^A → 'A'로 시작하는 문자열 찾기
- 매칭되는 문자열: "Apple", "America"
- 매칭되지 않는 문자열: "Banana", "carrot"
🔹 오라클에서 ^ 사용하기
SELECT * FROM Employees WHERE REGEXP_LIKE(EmployeeName, '^A');
✅ 이름이 'A'로 시작하는 직원 조회
🔹 SQL Server에서 ^ 대신 LIKE 사용하기
SELECT * FROM Employees WHERE EmployeeName LIKE 'A%';
✅ SQL Server에서는 LIKE 'A%'로 동일한 기능 수행
5. PERL 정규 표현식 연산자
오라클은 PERL 정규식 스타일을 지원하며, REGEXP_LIKE, REGEXP_SUBSTR 등의 함수를 제공합니다.
연산자 | 설명 |
REGEXP_LIKE | 특정 패턴이 포함된 행 조회 |
REGEXP_SUBSTR | 특정 패턴과 일치하는 문자열 추출 |
REGEXP_REPLACE | 특정 패턴을 다른 문자열로 변환 |
✔ 예제: REGEXP_REPLACE를 사용하여 전화번호 포맷 변경
SELECT REGEXP_REPLACE('123-456-7890', '(\d{3})-(\d{3})-(\d{4})', '(\1) \2-\3') FROM DUAL;
✅ 123-456-7890 → (123) 456-7890로 변환
6. 정규 표현식 조건과 함수
SQL에서 정규식을 활용하는 함수들은 특정 패턴과 일치하는 데이터를 찾거나 변환하는 데 유용합니다.
함수 | 설명 | 사용 가능 DB |
REGEXP_LIKE | 특정 패턴이 포함된 행 조회 | Oracle |
REGEXP_SUBSTR | 특정 패턴과 일치하는 문자열 추출 | Oracle |
REGEXP_REPLACE | 특정 패턴을 다른 문자열로 변경 | Oracle |
PATINDEX | 특정 패턴의 위치 반환 | SQL Server |
LIKE | 부분 문자열 검색 | SQL Server |
🔹 오라클에서 특정 패턴 찾기
SELECT * FROM Employees WHERE REGEXP_LIKE(EmployeeName, '^[Jj]');
✅ J 또는 j로 시작하는 직원 조회
🔹 SQL Server에서 패턴 찾기
SELECT * FROM Employees WHERE EmployeeName LIKE 'J%';
✅ SQL Server에서는 LIKE 연산자로 패턴 검색 가능
7. 결론
✅ 메타 문자 → ^, $,. 등의 기호를 사용하여 패턴 매칭 수행
✅ 리터럴 문자 → 특정 문자열을 검색할 때 사용하며, 특수 문자는 \로 이스케이프
✅ PERL 정규식 연산자 → 오라클에서 REGEXP_LIKE, REGEXP_REPLACE 사용 가능
✅ SQL Server는 LIKE, PATINDEX로 정규식 기능 대체
SQLD 자격증 대비를 위해 각 DBMS의 정규식 함수와 차이를 이해하고, 실습을 통해 익숙해지는 것이 중요합니다!