특정 문자 기준으로 문자열을 자르는 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);

 

TAGS.

Comments