SQL에서 정규식(Regex) 기초 배우기

SQL에서 정규식은 문자열을 패턴 매칭할 때 사용돼. 복잡한 문자열 데이터 처리에서 아주 유용하게 쓰이지. 특히 데이터 분석이나 ETL 작업을 할 때 많이 사용해.

1. 정규식(Regex)이란?

정규식(Regular Expression)은 특정한 패턴을 이용해 문자열을 검색하거나 치환하는 방법이야. SQL에서도 몇몇 함수나 명령어를 통해 정규식을 사용할 수 있어.

활용 예시

  • 이메일 형식 확인
  • 전화번호 패턴 찾기
  • 특정 텍스트가 포함된 문자열 추출

2. SQL에서 정규식을 지원하는 함수

대표적으로 많이 사용하는 SQL의 정규식 함수는 아래와 같아:

1) REGEXP_LIKE

특정 문자열이 정규식 패턴과 일치하는지 확인할 때 사용해.

문법

REGEXP_LIKE(column_name, 'pattern')

예시
이름에 ‘김’이 포함된 데이터를 찾고 싶다면:

SELECT *
FROM users
WHERE REGEXP_LIKE(name, '김');

2) REGEXP_REPLACE

정규식 패턴과 일치하는 문자열을 다른 문자열로 바꿔줘.

문법

REGEXP_REPLACE(column_name, 'pattern', 'replacement')

예시
전화번호에서 하이픈(-)을 제거하고 싶다면:

SELECT REGEXP_REPLACE(phone_number, '-', '') AS clean_number
FROM users;

3) REGEXP_SUBSTR

정규식 패턴에 맞는 첫 번째 문자열을 반환해.

문법

REGEXP_SUBSTR(column_name, 'pattern')

예시
문장 중 이메일 주소를 추출하고 싶다면:

SELECT REGEXP_SUBSTR(text, '[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}') AS email
FROM messages;

4) REGEXP_INSTR

패턴이 문자열에서 시작하는 위치를 반환해.

문법

REGEXP_INSTR(column_name, 'pattern')

예시
특정 패턴의 시작 위치 찾기:

SELECT REGEXP_INSTR(name, '김') AS position
FROM users;

3. 정규식 패턴 기본 문법

정규식은 패턴으로 동작하니까, 기초적인 문법을 익혀두면 좋아.

패턴설명예시
.임의의 한 문자a.b → a와 b 사이 문자
^문자열의 시작^A → A로 시작하는 문자열
$문자열의 끝end$ → end로 끝나는 문자열
*0번 이상 반복ab* → a, ab, abb..
+1번 이상 반복ab+ → ab, abb, abbb..
?0번 또는 1번 반복ab? → a, ab
\d숫자(0-9)\d{3} → 숫자 3자리
[abc]a, b, c 중 하나와 일치[aeiou] → 모음 찾기
[^abc]a, b, c를 제외한 문자와 일치[^0-9] → 숫자 제외
`(ab)`a 또는 b와 일치

4. 실전 예제

1) 이메일 형식 찾기

SELECT email
FROM users
WHERE REGEXP_LIKE(email, '^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$');

2) 한국 전화번호 추출 (010-XXXX-XXXX 형식)

SELECT phone_number
FROM contacts
WHERE REGEXP_LIKE(phone_number, '^010-\d{4}-\d{4}$');

3) 특정 패턴을 다른 형식으로 변환하기

하이픈이 있는 주민등록번호를 가리기:

SELECT REGEXP_REPLACE(ssn, '\d{6}-\d{7}', '******-*******') AS masked_ssn
FROM users;

5. 정리

SQL 정규식을 잘 활용하면 데이터를 효율적으로 찾고 변환할 수 있어.

  • 기본 함수: REGEXP_LIKE, REGEXP_REPLACE, REGEXP_SUBSTR
  • 기초 문법: ^, $, ., \d, *, +, ?

작은 예제부터 천천히 연습하면 금방 익숙해질 수 있으니까, 필요할 때 꼭 써보세요


게시됨

카테고리

작성자

댓글

답글 남기기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다