문자열과 정규표현식 패턴의 일치 여부를 알려주는 함수
방법 1. REGEXP (= RLIKE)
-- synonyms: REGEXP = RLIKE
SELECT expr REGEXP pat;
SELECT expr RLIKE pat;
SELECT expr NOT REGEXP pat;
SELECT expr NOT RLIKE pat;
문자열(expr)이 정규표현식 패턴(pat)과 일치하면 ⇒ 1
문자열(expr)이 정규표현식 패턴(pat)과 일치하지 않으면 ⇒ 0
문자열(expr) 또는 정규표현식 패턴(pat)가 NULL 인 경우 ⇒ NULL
방법 2. REGEXP_LIKE( )
SELECT REGEXP_LIKE(expr, pat[, match_type]);
문자열(expr)이 정규표현식 패턴(pat)과 일치하면 ⇒ 1
문자열(expr)이 정규표현식 패턴(pat)과 일치하지 않으면 ⇒ 0
문자열(expr) 또는 정규표현식 패턴(pat)이 NULL 인 경우 ⇒ NULL
▶ match_type (optional)
c: Case-sensitive matching.
i: Case-insensitive matching.
m: Multiple-line mode. Recognize line terminators within the string. The default behavior is to match line terminators only at the start and end of the string expression.
n: The ' . ' character matches line terminators. The default is for ' . ' matching to stop at the end of a line.
u: Unix-only line endings. Only the newline character is recognized as a line ending by the ' . ' , ' ^ ' , and ' $ ' match operators.
[예시]
테이블: car_rental_company
car_id | car_type | options |
1 | sedan | 열선시트,가죽시트,후방카메라 |
2 | suv | 스마트키,네비게이션,통풍시트 |
3 | suv | 주차감지센서,후방카메라 |
4 | hatchback | 주차감지센서,네비게이션,가죽시트 |
5 | suv | 네비게이션,열선시트,가죽시트,후방카메라 |
Q. '통풍시트', '열선시트', '가죽시트' 중 하나 이상의 옵션이 포함된 차량이 종류별로 몇 대인지 구하기
-- (1) REGEXP 사용해서 구하기
SELECT car_type
, COUNT(car_id) AS cars
FROM car_rental_company
WHERE options REGEXP '통풍시트|열선시트|가죽시트'
GROUP BY car_type
ORDER BY car_type ASC;
-- (2) REGEXP_LIKE() 사용해서 구하기
SELECT car_type
, COUNT(car_id) AS cars
FROM car_rental_company
WHERE REGEXP_LIKE(options, '통풍시트|열선시트|가죽시트')
GROUP BY car_type
ORDER BY car_type ASC;
car_type | cars |
hatchback | 1 |
sedan | 1 |
suv | 2 |
문자열에서 정규표현식 패턴과 일치하는 부분만 추출하는 함수
REGEXP_SUBSTR( )
SELECT REGEXP_SUBSTR(expr, pat[, pos[, occurrence[, match_type]]])
- 문자열(expr)에서 정규표현식 패턴(pat)와 일치하는 부분만 추출한다. 일치하는 부분이 없다면 NULL을 반환한다.
- 문자열(expr) 또는 정규표현식 패턴(pat)이 NULL 인 경우 ⇒ NULL을 반환한다.
문자열에서 정규표현식 패턴과 일치하는 부분을 변환하는 함수
REGEXP_REPLACE( )
SELECT REGEXP_REPLACE(expr, pat, repl[, pos[, occurrence[, match_type]]]);
- 문자열에서 정규표현식 패턴과 일치하는 부분을 대체 문자열로 변환한 뒤, 변환이 적용된 결과 문자열을 반환한다.
- 문자열(expr), 정규표현식 패턴(pat), 대체할 문자열(rep1) 중 하나라도 NULL 인 경우 ⇒ NULL을 반환한다.
문자열에서 정규표현식 패턴과 일치하는 부분의 인덱스를 알려주는 함수
REGEXP_INSTR( )
SELECT REGEXP_INSTR(expr, pat[, pos[, occurrence[, return_option[, match_type]]]])
- 문자열에서 정규표현식 패턴과 일치하는 부분이 몇 번째 인덱스에서 시작하는지 알려준다. 일치하는 부분이 없다면 0을 반환한다. (Character indexes는 1에서 시작한다.)
- 문자열(expr) 또는 정규표현식 패턴(pat)이 NULL 인 경우 ⇒ NULL을 반환한다.
[참고자료]
MySQL Documentation > 14.8.2 Regular Expressions
https://dev.mysql.com/doc/refman/8.4/en/regexp.html
'데이터 처리 도구 > SQL' 카테고리의 다른 글
[MySQL] 집합 연산(2): INTERSECT, EXCEPT (0) | 2024.08.06 |
---|---|
[MySQL] WITH절 사용하여 CTE 생성하기 (0) | 2024.07.28 |
정규 표현식(Regular Expression) (0) | 2024.03.20 |
[MySQL] 집합 연산(1): UNION, UNION ALL 사용하여 조회 결과 결합하기 (0) | 2022.09.07 |
[MySQL] 비트 연산과 관련 함수(CONV, BIN, BIT_LENGTH) (0) | 2022.09.04 |