데이터로그😎
[MySQL] REGEXP 함수 본문
REGEXP: 정규표현식을 사용하여 패턴 매칭을 수행하는 MySQL의 연산자
이를 사용한 예시를 leetcode 문제에서 보여주겠다.
Table: Users
+---------------+---------+
| Column Name | Type |
+---------------+---------+
| user_id | int |
| name | varchar |
| mail | varchar |
+---------------+---------+
user_id is the primary key (column with unique values) for this table.
This table contains information of the users signed up in a website. Some e-mails are invalid.
문제:
Write a solution to find the users who have valid emails.
A valid e-mail has a prefix name and a domain where:
- The prefix name is a string that may contain letters (upper or lower case), digits, underscore '_', period '.', and/or dash '-'. The prefix name must start with a letter.
- The domain is '@leetcode.com'.
요약하자면 올바른 메일의 조건은 아래와 같음
- 반드시 문자로 시작
- 숫자 허용
- underscore(_), period(.), dash(-) 허용
- 메일은 반드시 '@leetcode.com'이어야 함.
이러한 조건들을 다 담을 수 있는 쿼리문이 있을까? 있다. 정규표현식을 쓰면 되는 것!
SELECT *
FROM Users
WHERE mail REGEXP '^[a-zA-Z][a-zA-Z0-9_.-]*@leetcode\\.com$'
- ^[a-z]: ^ 표시는 ~로 시작한다는 뜻이다. 그리고 [a-zA-Z]는 모든 영문자를 의미한다. 따라서 첫번째 글자는 반드시 영문자로 시작한다는 말이다. ▶ 조건 1 해결!
- [a-zA-Z0-9_.-]*
- [a-zA-Z0-9_.-] : 모든 영문자와 숫자를 허용하며 underscore, period, dash도 허용한다는 말이다 ▶ 조건 2 ,3 해결!
- * : [a-zA-Z0-9_.-] 가 여러번 반복해도 된다는 말이다.
- @leetcode\\.com$
- 사이에 \\가 온 이유: .(period)는 어떠한 문자와 일치하는 정규표현식 패턴이다. 따라서 문자 자체의 period(.)로 인식 되려면 반드시 슬래시가 두개 붙어야 한다. ▶ 조건 4 해결!
- $ : 마지막을 의미한다.
'SQL > MySQL' 카테고리의 다른 글
[MySQL] 테이블 정보 확인 (0) | 2023.12.29 |
---|---|
[MySQL] 날짜형식 관련 함수 (0) | 2023.12.29 |
[윈도우 함수] Lead, Lag 함수 (1) | 2023.11.26 |
[윈도우 함수] RANK() OVER() (0) | 2023.11.24 |
[집계 함수] GROUP BY, GROUPING (0) | 2023.09.08 |