SQL 정규 표현식
- 데이터베이스에서 패턴 매칭을 수행할 때 사용된다.
- 주로 텍스트 데이터의 특정 패턴을 검색하거나 필터링할 때 활용된다.
- 데이터베이스 시스템에 따라 다양한 방법으로 구현된다.
기본 패턴 매칭
LIKE 연산자를 사용하여 간단한 패턴 매칭을 수행할 수 있다.
- %: 임의의 문자 시퀀스를 매칭한다.
- _: 임의의 한 문자를 매칭한다.
- 예시: SELECT * FROM users WHERE name LIKE 'A%' (이름이 'A'로 시작하는 데이터를 검색한다)
정규 표현식 사용
MySQL, PostgreSQL, Oracle 등 일부 데이터베이스는 정규 표현식 기반의 고급 패턴 매칭을 지원한다.
정규 표현식은 텍스트를 패턴으로 설명하며, 예를 들어 '^[A-Za-z]+$'는 알파벳 문자열을 의미한다.
데이터베이스별 정규 표현식 문법
MySQL
- REGEXP 또는 RLIKE를 사용한다.
- 예시: SELECT * FROM users WHERE name REGEXP ' ^[A-Za-z]+$'
PostgreSQL
- ~(대소문자 구분) 또는 ~*(대소문자 구분 없음)를 사용한다.
- 예시: SELECT * FROM users WHERE name ~ ' ^[A-Za-z]+$'
Oracle
- REGEXP_LIKE 함수를 사용한다.
- 예시: SELECT * FROM users WHERE REGEXP_LIKE(name, ' ^[A-Za-z]+$')
SQLite
- 기본적으로 REGEXP를 지원하지 않지만, 사용자 정의 함수를 통해 사용 가능하다.
정규 표현식 문법
- ^: 문자열의 시작
- $: 문자열의 끝
- _: 임의의 한 문자
- *: 앞 분자의 0회 이상 반복
- +: 앞 문자의 1회 이상 반복
- []: 괄호 안의 문자 중 하나를 매칭
- |: OR(또는) 조건
- \: 특수 문자의 이스케이프 처리
성능 고려사항
정규 표현식은 대규모 데이터셋에서 리소스를 많이 사용할 수 있다.
인덱스를 설정하거나 최소한의 조건으로 쿼리를 최적화하는 것이 중요하다.
예시
숫자로만 구성된 데이터 검색하기
SELECT *
FROM users
WHERE phone_number REGEXP '^[0-9]+$';
이메일 구조를 가진 데이터 검색하기
SELECT *
FROM users
WHERE email REGEXP '^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$';
728x90
'SQL' 카테고리의 다른 글
[SQL] 가독성 높이기 (0) | 2025.01.08 |
---|---|
[SQL] INSTR() (0) | 2024.12.19 |
[SQL] SUBSTR() (0) | 2024.12.19 |
[SQL] OVER() (4) | 2024.12.14 |
[SQL] 이동 평균 구하기 (0) | 2024.12.14 |