REGEXP(Regular Expression, 정규 표현식)
MySQL에서 REGEXP는 정규 표현식을 사용하여 문자열을 검색하거나 필터링하는 데 사용되는 연산자입니다.
REGEXP 연산자는 WHERE 절에서 사용되어 특정 패턴과 일치하는 문자열을 선택할 수 있습니다.
일반적으로 사용되는 몇 가지 정규 표현식 메타 문자는 다음과 같습니다.
1. '^' (문자열의 시작) / '$' (문자열의 끝)
- '^': 문자열이 'John'으로 시작하는 행을 찾기 위한 쿼리
- '$': 문자열이 'John'으로 끝나는 행을 찾기 위한 쿼리
# ['^']
SELECT *
FROM table_name
WHERE column_name REGEXP '^John';
# ['$']
SELECT *
FROM table_name
WHERE column_name REGEXP 'John$';
2. '.' (임의의 문자)
- 'J' 다음에 어떤 문자가 와도 상관없고, 그 다음에 'hn'이 오는 행을 찾기 위한 쿼리
SELECT *
FROM table_name
WHERE column_name REGEXP 'J.hn';
3. '*' (0회 이상의 반복)
- 'J' 다음에 0회 이상의 'o'가 오고, 그 다음에 'n'이 오는 행을 찾기 위한 쿼리
SELECT *
FROM table_name
WHERE column_name REGEXP 'Jo*n';
4. '+' (1회 이상의 반복)
- 'J' 다음에 1회 이상의 'o'가 오고, 그 다음에 'n'이 오는 행을 찾기 위한 쿼리
SELECT *
FROM table_name
WHERE column_name REGEXP 'Jo+n';
5. '?' (0 또는 1회의 반복)
- 'Colo' 다음에 'u'가 0회 또는 1회 나오고, 그 다음에 'r'이 오는 행을 찾기 위한 쿼리
SELECT *
FROM table_name
WHERE column_name REGEXP 'Colou?r';
6. '[ ]' (문자 클래스)
- 소문자 모음 'a', 'e', 'i', 'o', 'u' 중 하나가 포함된 행을 찾기 위한 쿼리
SELECT *
FROM table_name
WHERE column_name REGEXP '[aeiou]';
7. '|' (논리 OR)
- 'apple', 'banana' 또는 'orange' 중 하나와 일치하는 행을 찾기 위한 쿼리
SELECT *
FROM table_name
WHERE column_name REGEXP 'apple|banana|orange';
8. '-' (문자 범위 지정)
- 문자의 범위를 지정할 때 사용
- '[0-9]': 숫자가 하나 이상 포함된 행을 찾기 위한 쿼리
- '[a-z]': 소문자가 하나 이상 포함된 행을 찾기 위한 쿼리
- '[A-Z]': 대문자가 하나 이상 포함된 행을 찾기 위한 쿼리
# [0-9]
SELECT *
FROM table_name
WHERE column_name REGEXP '[0-9]';
# [a-z]
SELECT *
FROM table_name
WHERE column_name REGEXP '[a-z]';
# [A-Z]
SELECT *
FROM table_name
WHERE column_name REGEXP '[A-Z]';
9. '\b' (단어의 경계)
- 단어의 경계를 나타냅니다. '\b'는 단어의 시작이나 끝과 일치합니다.
- '\'는 MySQL에서 이스케이프 문자로 사용되기 때문에, 정규 표현식에서는 '\'를 2번 적어줘야 합니다.
SELECT *
FROM your_table
WHERE your_column REGEXP '\\bword';
# 'word'가 포함된 행을 반환
10. '{n}' (반복 횟수 지정)
- {n}: 바로 앞의 문자가 n번 나타나는 행을 찾기 위한 쿼리
- {n,}: 바로 앞의 문자가 최소 n번 이상 나타나는 행을 찾기 위한 쿼리
- {n, m}: 바로 앞의 문자가 최소 n번, 최대 m번 나타나는 행을 찾기 위한 쿼리
- 'a{2, 4}': a가 2번 이상, 최대 4번 포함된 행을 찾기 위한 쿼리
- '^[0-9]{3}-[0-9]{4}-[0-9]{4}$': (시작)숫자 3번, 숫자 4번, 숫자 4번(끝)인 행을 찾기 위한 쿼리
ex) 010-1234-5678
# 1
SELECT *
FROM table_name
WHERE column_name REGEXP 'a{2,4}';
# 2
SELECT *
FROM table_name
WHERE column_name REGEXP '^[0-9]{3}-[0-9]{4}-[0-9]{4}$';
본 게시글은 ChatGPT의 도움을 받아 작성하였습니다.
'Language > MySQL' 카테고리의 다른 글
CONCAT 함수 (0) | 2024.01.05 |
---|---|
재귀 함수 (0) | 2024.01.04 |
DataBase (데이터베이스) (2) | 2024.01.03 |
SQL 집합 연산자 (0) | 2023.12.29 |
SQL문 기본 구조 (0) | 2023.12.25 |