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'등과 같은 키워드를 하나로 통일시키는 방법도 가능은 하지만, 모든 데이터를 포함할 수 있도록 조건 값을 일일이 찾아서 지정해야함 > 대용량 데이터에서는 찾아내기 힘들 뿐더러 변수를 찾아내지 못해 오류가 일어날 가능성이 큼
반응형