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번 전에 @가 있는 경우 못찾는 경우가 있음
'프로그래밍 > SQL' 카테고리의 다른 글
문자열이 특정한 조건을 만족하는 형태로 이루어져있는지 체크하는 방법(정규표현식) (0) | 2024.10.25 |
---|---|
특정 문자 기준으로 문자열을 자르는 SUBSTRING_INDEX() (0) | 2024.10.23 |
이전 행을 가져오는 lag()와 이후 행을 가져오는 lead() (0) | 2024.10.22 |
SQL 코딩테스트 복기 - JSON array에 들어있는 원소의 개수(JSON_LENGTH) (0) | 2024.04.27 |
SQL 연습 - 비교연산자 = , if 조건문이 여러개일때.. case ~ when (0) | 2023.11.09 |