DB/문법
MySQL Substring_index() 함수
ssury94
2024. 11. 28. 22:39
문자열을 특정 구분자(delimiter)를 기준으로 나누고, 지정된 횟수만큼의 구분자 이전 또는 이후의 부분 문자열을 반환하는 함수 -Substringindex()
email주소의 도메인은 제외하고 아이디만 얻고싶다!
ex) marurun@naver.com > marurun
SELECT SUBSTRING_INDEX(email,'@',1)
FROM users u ;
email - 컬럼
'@' - 문자열을 나누기위한 구분자
1 - 양수일 경우 구분자 기준 왼쪽부터 반환
-- 이메일의 도메인만 조회하기

SELECT SUBSTRING_INDEX(email,'@',-1)
FROM users u ;
음수일경우 구분자 기준 오른쪽 반환
-- ㅁ국가가 'usa'인 사용자의 이메일 도메인을 'us.com'으로 변경하세요.
UPDATE users
SET email=concat(SUBSTRING_INDEX(email,'@',1),'@us.com')
where country ='USA';
replace만 머리속에 맴돌아가지고 이거로는 안될까 계~속 문법틀려 실패하다가 겨우겨우 결과값 추출은 성공했지만
UPDATE users
set email=REPLACE(email,SUBSTRING_INDEX(email,'@',-1),'india.com')
where country ='India';
퍼플 왈, replace()는 이런 문제가 생길 수 있다고 concat()을 추천함
예전 e,...오류도 그렇고 replace()는 아래 내용 참고해서 주의하여 사용하기.
- NULL 값 처리:
만약 email 컬럼에 NULL 값이 포함되어 있다면, REPLACE() 함수는 NULL을 반환합니다. 따라서 NULL 값을 처리하기 위해 추가적인 조건이 필요할 수 있습니다. - 데이터 손실 위험:
잘못된 도메인 대체로 인해 원하지 않는 결과가 발생할 수 있습니다. 예를 들어, 이메일 주소가 이미 uk.com으로 끝나는 경우 중복 대체가 발생할 수 있습니다. - 대소문자 문제:
SQL Server에서는 대소문자를 구분하지 않지만, MySQL에서는 기본적으로 대소문자를 구분합니다. 따라서 이메일 주소의 대소문자에 따라 결과가 달라질 수 있습니다. - 성능 문제:
대량의 데이터를 업데이트하는 경우 성능 저하가 발생할 수 있으며, 이로 인해 데이터베이스의 다른 작업에 영향을 줄 수 있습니다.