데이터로그😎

[MySQL] REGEXP 함수 본문

SQL/MySQL

[MySQL] REGEXP 함수

지연v'_'v 2023. 12. 20. 11:14

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'.

요약하자면 올바른 메일의 조건은 아래와 같음

 

  1. 반드시 문자로 시작
  2. 숫자 허용
  3. underscore(_), period(.), dash(-) 허용
  4. 메일은 반드시 '@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