INSTR(), LOCATE()를 이용하여 원하는 문자의 위치를 찾기

sql에서 특정 문자열에서 특정 위치까지 자르고 싶은데, 특정 위치를 알고싶을 때가 있다

 

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 형태로 되어있는데

 

이메일에서 (이름)부분만 가져오고 싶다면 어떻게 해야할까?

 

@의 위치 앞까지 자르면 될것 같은데

 

substr()은 특정 위치에서 특정 위치까지 슬라이싱하는 함수인데, 문제는 @의 위치를 모른다는 것

 

MYSQL에서는 INSTR(문자열, 찾고자하는 문자)함수가 특정 문자의 위치를 찾아준다

 

select name,email,INSTR(email,'@') from person;

 

 

 

 

SQL에서는 인덱스가 1부터 시작함

 

해당 문자가 없다면 0을 return함

 

만약 #을 찾고 싶다면..

 

 

 

 

단순 문자 말고도 문자열을 찾을수도 있음

 

.com을 찾고자 한다면?

 

.com이 먼저 나온 위치를 반환하는데 John_Doe123!@example.com에서 .com이 처음 나온 곳은

 

. 의 위치인 21번

 

 

 

 

LOCATE(찾을 문자, 문자열, 위치)는 '위치'부터 시작해서 '찾을 문자'의 위치를 반환함

 

select name,email,INSTR(email,'@'),LOCATE('@',email,9) from person;

 

 

 

 

9번부터 @를 찾으라고 한다면 9번 전에 @가 있는 경우 못찾는 경우가 있음

TAGS.

Comments