MySQL/BasicGrammer
[MySQL] REGEXP 정규표현식 정리, LIKE IN 같이 사용
hanshow113
2022. 1. 8. 19:15
SELECT CITY
FROM STATION
WHERE Country LIKE "a%"
OR Country LIKE "e%";
-- Country가 a나 e로 시작하는 것을 조회
SELECT CITY
FROM STATION
WHERE Country REGEXP '^a|^e';
REGEXP 정리
* 코드를 짧게 작성할 수 있지만, 인덱싱을 적용 중이지 않다면 LIKE 보다 속도가 느린 단점이 있음.
1. Matching
기호 | 기능 | 예시 | 설명 |
. | 문자 하나 | "...." | 문자열 4글자 이상인 것 찾음 |
| (수직선) | | 로 구분된 문자열 찾기 | "하나|둘" | "하나" or "둘" 에 해당하는 문자열 찾음 |
[] | [] 안에 나열된 패턴 문자열 찾음 | "[123]셋" | '1셋' or.'2셋' or '3셋' |
^ | 시작하는 문자열 찾음 | '^넷' | '넷'으로 시작되는 문자열 찾음 (넷플릭스, 넷마블) |
$ | 끝나는 문자열 찾음 | '넷$" | '넷'으로 끝나는 문자열 찾음 (인터넷, 이더넷) |
⌾ REGEXP에서 논리연산자 AND를 사용하기 위해서는 필요한 정규표현식 n개를 AND로 이어서 사용해야 함.
SELECT CITY
FROM STATION
WHERE CITY REGEXP "^[aeiou]"
AND CITY REGEXP "[aeiou]$";
-- CITY명의 첫 글자와 마지막 글자에 모음(a,e,i,o,u)가 동시에 포함되는 데이터 조회
2. Numbers Limit
기호 | 기능 | 예시 | 설명 |
* | 0회 이상 나타나는 문자 | "a*" | 'a'가 0번 이상 등장하는 문자열 'a','aa', 'b' |
+ | 1회 이상 나타나는 문자 | '장+' | '장'이 1번 이상 등장하는 문자열 '장', '간장', '간장공장', '장장장' |
문자{m, n} | m회 이상, n회 이하 반복되는 문자 | '장{1, 2}' | '장' 1회 이상, 2회 이하 문자열 '장', '장장', '간장공장' |
? | 0~1회 나타나는문자 | '장?' | '장'이 0~1회 '장', '장장', '간장' |
3. String Group
기호 | 기능 | 예시 | 설명 |
[A-z] or [:alpha:] or \a | 영어 문자열 찾음 | "^[A-z]" | 영어로 시작하는 문자열 찾음 |
[0-9] or [:digit:] or \d | 숫자 문자열 찾음 | "[0-9]+" | 한 개 이상의 숫자가 등장하는 문자열 찾음 |
4. Not
기호 | 기능 | 예시 | 설명 |
[^문자] | [] 안의 문자를 포함하지 않는 문자열 찾음 | '[^장]' | '장'을 포함하지 않는 문자열 찾음 - '간장', '장', '간장공장' 모두 제외됨 |