특정 문자 기준으로 문자열을 자르는 SUBSTRING_INDEX()
특정 문자를 기준으로 주어진 문자열을 split하고 싶은 경우가 있다.
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 형태로 된 이메일에서 @를 기준으로 split하고 싶을때
어떻게 해야할까?
mysql에서는 substring_index(문자열, 구분자, 인덱스)라는 함수를 지원한다
여기서 인덱스는 가져올 개수를 뜻하는데
MIKe007@example999.com에서 @로 split하면 MIKe007, example999.com인데
인덱스 = 1하면 MIke007
인덱스 >= 2하면 MIKe007@example999.com
인덱스 = -1하면 example999.com
select name,email,substring_index(email,'@',1),substring_index(email,'@',-1),
substring_index(email,'@',2), substring_index(email,'@',3) from person;
즉 인덱스 1,2,3,...으로 하면 왼쪽부터 1개,2개,3개,...
인덱스 -1,-2,-3,...으로 하면 오른쪽부터 1개,2개,3개,...
응용해서 예를 들어 '가나,다라,마바,사아'로 된 문자열일때, '다라'만 가져오고 싶다면?
substring_index(문자열,',',2)는 '가나,다라'이니까
여기에 substring_index를 한번 더 적용해서 -1번을 가져온다면
select substring_index(substring_index('가나,다라,마바,사아',',',2),',',-1);
'프로그래밍 > SQL' 카테고리의 다른 글
where절에 분명히 있는 column명을 썼는데 없다고 에러가 나는 이유(unknown column) (0) | 2024.10.26 |
---|---|
문자열이 특정한 조건을 만족하는 형태로 이루어져있는지 체크하는 방법(정규표현식) (0) | 2024.10.25 |
INSTR(), LOCATE()를 이용하여 원하는 문자의 위치를 찾기 (0) | 2024.10.22 |
이전 행을 가져오는 lag()와 이후 행을 가져오는 lead() (0) | 2024.10.22 |
SQL 코딩테스트 복기 - JSON array에 들어있는 원소의 개수(JSON_LENGTH) (0) | 2024.04.27 |