정규표현식(Regex) in SQL

1. 정규표현식(Regex)이란?

정규표현식은 특정 패턴을 가진 문자열을 검색하거나 추출, 교체할 때 사용하는 표현 방식입니다.
SQL에서는 주로 데이터를 검색하거나 필터링할 때 활용됩니다.

대표적으로 다음 함수가 사용됩니다.

  • Oracle: REGEXP_LIKE, REGEXP_INSTR, REGEXP_SUBSTR, REGEXP_REPLACE
  • MySQL/MariaDB: REGEXP, RLIKE, REGEXP_LIKE
  • PostgreSQL: ~, ~*, !~, !~*, regexp_matches, regexp_replace, regexp_split_to_table

2. SQL 주요 DB별 정규표현식 함수 예시

데이터베이스설명 및 예시
OracleWHERE REGEXP_LIKE(column, '[A-Z]{3}[0-9]{3}')
MySQLWHERE column REGEXP '^[A-Za-z]+[0-9]+$'
PostgreSQLWHERE column ~* 'pattern' (대소문자 구분하지 않음)

3. 정규표현식 주요 메타문자 및 예시 총정리

기호설명예시매칭 결과
^문자열의 시작 지점^AA로 시작하는 문자열만 매칭
$문자열의 끝 지점Z$Z로 끝나는 문자열만 매칭
.모든 단일 문자 (개행 제외)a.baab, acb, adb
*앞의 문자 0회 이상 반복ab*cac, abc, abbc
+앞의 문자 1회 이상 반복ab+cabc, abbc
?앞의 문자가 없거나 한 번만 존재colou?rcolor, colour
\특수문자를 일반 문자로 변환 (escape)\.문자.과 매칭
[ ]문자 집합 중 하나[abc]a, b, 또는 c와 매칭
[^ ]문자 집합이 아닌 문자[^abc]a, b, c 제외 모든 문자
[a-z]문자 범위 지정[0-9]숫자 한자리
{n}정확히 n회 반복[0-9]{3}숫자 3자리
{n,m}최소 n회, 최대 m회 반복[A-Z]{2,4}대문자 2~4개
( )그룹 지정(abc)+abc, abcabc, 등
``OR 조건`dog

4. SQL 함수별 예시

▶️ Oracle 예시

SELECT emp_name
FROM employee
WHERE REGEXP_LIKE(emp_id, '^[A-Z]{2}[0-9]{4}$');
-- 예) emp_id가 AB1234 형태

▶️ MySQL 예시

SELECT name
FROM user
WHERE email REGEXP '^[a-zA-Z0-9._%-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$';
-- 예) 이메일 형태 검증

▶️ PostgreSQL 예시

SELECT product_code
FROM product
WHERE product_code ~ '^PRD[0-9]{3}$';
-- 예) PRD로 시작하며 숫자 3자리로 끝나는 코드

5. 자주 사용하는 실무 예제 패턴 모음

이메일 주소 패턴

^[a-zA-Z0-9._%-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$

전화번호 패턴 (000-0000-0000 형태)

^[0-9]{2,3}-[0-9]{3,4}-[0-9]{4}$

주민등록번호 패턴

^[0-9]{6}-[1-4][0-9]{6}$

알파벳과 숫자가 섞인 아이디

^[a-zA-Z]+[0-9]+$

한글만 포함된 문자열

^[가-힣]+$

6. 정규표현식 사용 시 유의사항

  • DB마다 지원하는 문법이 조금씩 다르므로 사용 전 문서를 확인해야 합니다.
  • 너무 복잡한 정규표현식은 성능을 떨어뜨릴 수 있습니다.
  • 정규표현식은 강력한 도구지만 오남용하면 가독성이 떨어지므로 주석이나 명확한 설명을 함께 제공하세요.

7. DB별 공식 레퍼런스 링크

이 자료를 참고하여 SQL에서 효과적인 데이터 필터링과 패턴 매칭 작업을 수행할 수 있습니다.

Leave a Comment