SQL 공부, 문자열과 정규표현식 REGEXP
다양성과 방향성

여행으로 재미있게 살고 엑셀로 성장하는 삶

직무강화/SQL

SQL 공부, 문자열과 정규표현식 REGEXP

LATI 라티 2024. 9. 1. 20:11
반응형

 

오늘도 문제를 푸는데 새로운 함수가 있어서 가지고 왔다.

내가 찾는 메일은 3가지의 조건에 부합해야 한다.

 

1. 접두사의 첫번째 문자는 소문자 또는 대문자로 시작할 것

2. 접두사에서 다른 문자들은 '_,'.','-'를 포함할 수 있음.

3. domain은 @leetcode.com으로 끝나야 함.

 

 

 

 

 

사실, 테이블에서 값을 불러오는건 전혀 문제가 되지 않는데,

중요한 건 도대체 이걸 어떻게 찾아야하는 것이느냐였다.

물론, rigt(a,5)와 같은 방식으로 @leetcode.com은 찾을 수 있지만

앞에 있는 접두사 조건들은 도대체 어떻게 해야 할지 몰랐다.

 

REGEXP(Regular Expression) 정규표현식 : SQL에서 문자열이 특정 패턴을 만족하는지 검사할 때 사용되는 함수

 

^ : 문자열의 시작을 의미

^[a-z] : 문자열의 시작이 소문자 a~z까지 가능

^[a-zA-Z] : 문자열의 시작이 소문자 a~z, 대문자 A~Z까지 가능

^[a-zA-Z0-9] : 문자열의 시작이 소문자 a~z, 대문자 A~Z까지 가능, 숫자 0~9까지 가능

 

따라서 조건들을 맞춰보면 아래와 같다.

1. 접두사의 첫번째 문자는 소문자 또는 대문자로 시작할 것

 

   WHERE email '^[a-zA-Z]'

 

2. 접두사에서 다른 문자들은 '_,'.','-'를 포함할 수 있음.

 

   WHERE email '^ [a-zA-Z] [a-zA-Z0-9_.-]*'

 

3. domain은 @leetcode.com으로 끝나야 함.

   WHERE email  '^ [a-zA-Z] [a-zA-Z0-9_.-]*@leetcode\.com$'

 

문자의 반복은 *로 표현 (시작은 1번 조건에 맞게, 이후 @ 나오기 전까지는 다음 조건의 반복)

문자의 끝은 $로 표현

'.'은 정규표현식에서 모든 단일문자를 의미하는 특수문자이므로, .을 정확히 매칭하기 위해 '\.'와 같이 붙여서 사용해야 함.

 

정답은

SELECT *
FROM Users
WHERE mail REGEXP '^[a-zA-Z][a-zA-Z0-9._-]*@leetcode\.com$';
반응형