문자열이 특정한 조건을 만족하는 형태로 이루어져있는지 체크하는 방법(정규표현식)
use igoat;
CREATE TABLE person (
name VARCHAR(50),
email VARCHAR(100)
);
INSERT INTO person (name, email) VALUES
('JohnDoe', 'John_Doe123!@example.com'),
('Alice456', 'Alice@DoMaincool.com'),
('EmmaJones', 'EmmaJones@xyztestsite.org'),
('BobSmith', 'BobSmith@Examplexyz.com'),
('Charlie9', 'Charl!e9@Tech4life.io'),
('Sara2024', 'Sra2024@coool-domain.org'),
('Mike007', 'MiKe007@example999.com');
select * from person;
이메일이 위와 같이 주어질떄, 형식에 맞는 이메일인지 체크하고 싶다.
구체적으로 (이름)@(도메인).com 형태의 이메일이길 원하고
이름, 도메인은 각각 1자부터 50자까지, 이름은 영어 대소문자, 숫자로만 이루어져있고
도메인은 영어 대소문자로만 이루어져있다.
영어 대소문자로만 이루어져있는지 체크하는 방법은 정규표현식으로 가능하다.
다른 방법은 없는듯?
이름 같은 경우를 먼저 영어 대소문자로만 이루어져있는지 체크해보자
select name,email,substr(email,1,instr(email,'@')-1) as email_name from person;
여기서 이메일 이름이 대소문자로만 이루어져있는지 체크하려면
@앞까지 instr()로 인덱스 위치를 찾고, substr()로 추출해서 이름만 가져오고
이 이름이 영어 대소문자로만 이루어져있는지 체크
select * from (select name,email,substr(email,1,instr(email,'@')-1) as email_name from person) A
where email_name regexp '^[A-za-z]+$';
여기서 ^은 문자열의 시작
[A-Za-z]는 영어 대소문자
+는 문자 하나 이상
$는 문자열의 끝
주어진 문자열의 처음부터 끝까지 살펴볼때 영어 대소문자로 1자 이상 이루어져있는지 체크
여기서 1자 이상 50자 이하로 제한하고 싶으면 {1,50}을 뒤에 추가하면 된다
'^[A-Za-z]{1,50}$'
50자가 넘는 데이터를 하나 추가해보고 '^[A-Za-z]+$'로 해보면
'^[A-Za-z]{1,50}$'로 해보면?
where email_name regexp '^[A-Za-z]{1,50}$';
그러면 이제 (이름)@(도메인).com 형태로 이루어져있고 이름이 영어 대소문자, 숫자로만 이루어져있으며
도메인은 영어 대소문자로만 이루어져있고 각각 1~50자 이내로 이루어져있는 데이터만 추출하고 싶다면?
select * from person
where email regexp '^[A-Za-z0-9]{1,50}@[A-Za-z]{1,50}\\.com$';
'^[A-Za-z0-9]{1,50}@[A-Za-z]{1,50}\\.com$'로 하면 된다.
^은 문자열의 시작
$는 문자열의 끝
이름 부분 [A-Za-z0-9]{1,50}은 영어 대소문자, 숫자로만 이루어져있고 1~50자 이내
이름 뒤에 @가 들어가야하고
@뒤에 도메인 부분 [A-Za-z]{1,50}은 영어 대소문자로만 이루어져있고 1~50자 이내
\\.은 .이 정규표현식에서 '문자 하나'만을 나타내는 문법이라서 \\으로 escape처리를 해서 진짜 .임을 나타냄
마지막에 .com으로 끝남을 표시
'프로그래밍 > SQL' 카테고리의 다른 글
where절에 분명히 있는 column명을 썼는데 없다고 에러가 나는 이유(unknown column) (0) | 2024.10.26 |
---|---|
특정 문자 기준으로 문자열을 자르는 SUBSTRING_INDEX() (0) | 2024.10.23 |
INSTR(), LOCATE()를 이용하여 원하는 문자의 위치를 찾기 (0) | 2024.10.22 |
이전 행을 가져오는 lag()와 이후 행을 가져오는 lead() (0) | 2024.10.22 |
SQL 코딩테스트 복기 - JSON array에 들어있는 원소의 개수(JSON_LENGTH) (0) | 2024.04.27 |