Study/class note

문제2. SQL / 이메일에서 도메인 추출하기

chanzae 2021. 11. 8. 18:03

[내가 쓴 코드]

select substr(substr(email, 1,instr(email, '.')-1),instr(email,'@')+1)
 from emp;

 

[내가 쓴 코드의 문제]

이메일 아이디에 '.'이 포함되면 null값이 나옴

 

[다른 사람이 쓴 코드]

-- 1
select substr( email, instr(email,'@')+1, instr(email,'.')-instr(email,'@')-1 )
from emp;
-- 이메일 아이디에 '.'이 포함되면 null값이 나옴

-- 2
select substr(email,instr(email,'@')+1,instr(substr(email,instr(email,'@')+1),'.')-1)
from emp;
-- 제대로 출력됨

 

[해결]

-- 다시 쓴 코드 1
select substr(substr(email, instr(email,'@')+1),1,instr(substr(email, instr(email,'@')+1), '.')-1)
 from emp;
 
-- 다시 쓴 코드 2
select substr(email, instr(email,'@')+1,instr(substr(email, instr(email,'@')+1),'.')-1)
 from emp;

1. 수식을 설명하면 substr(email, '@'의 위치 다음 문자열의 순서, '.'의 위치 전의 문자열의 순서)로 도메인을 분리하면 됨.

2. 아이디에 '.'이 포함되어 있어도 substr의 시작 순서가 '@'이 다음 문자부터 라서 상관없음 > 변수 제거

3. 이메일 주소의 '.'은 '@'를 분리한 뒤 첫번째 '.'을 찾아내는 것이 핵심

4. replace 함수는 이용해 '.com', '.net', '.ac.kr', 'co.kr'등과 같은 키워드를 하나로 통일시키는 방법도 가능은 하지만, 모든 데이터를 포함할 수 있도록 조건 값을 일일이 찾아서 지정해야함 > 대용량 데이터에서는 찾아내기 힘들 뿐더러 변수를 찾아내지 못해 오류가 일어날 가능성이 큼

반응형