[Oracle] 데이터 테이블에서 이메일 전체 조회가 아닌 아이디만 조회하고 싶을 때

     

    <목표>

    EMPLOYEE 테이블에서 EMAIL 조회 시, sun_di@or.kr이 아닌 sun_di ( == 아이디)만 조회하고 싶다.

     

     

     

     

    <시행착오...ㅎ>

    접근1

    SUBSTR 함수를 이용해서 '@'를 찾아 그 이전까지만 추출하고 싶었다. 

    SELECT EMP_NAME,SUBSTR(EMAIL,1,'@')FROM EMPLOYEE;

     

     

    결과값=> 실패

    더보기

    ORA-01722: invalid number 
    01722. 00000 -  "invalid number" 
    *Cause:    The specified number was invalid. 
    *Action:   Specify a valid number.

    => 이유 SUBSTR 함수의 매개변수 데이터 타입을 보자,

    SUBSTR(STRING,POSITON[,LENGTH]) 인데, 위의 경우 마지막 매개변수인 LENGTH에 '@' (== CHAR데이터 타입)을 입력해서 생긴 오류이다. 

    => 하지만, 아이디마다 '@'의 위치가 모두 다르기 때문에 SUBSTR 함수만으로는 불가능하다 

    => INSTR 함수를 같이 사용해보면 어떨까?

     

     

     

     

    접근2

    INSTR 함수를 이용해서 '@' 의 위치에 접근하고, 그 위치 이전까지의 값만을 출력하고자한다.

    SELECT EMP_NAME,SUBSTR(EMAIL,1,INSTR(EMAIL,'@'))
    FROM EMPLOYEE;

     

     

    결과값 => 실패

    더보기

    선동일 sun_di@
    송종기 song_jk@
    노옹철 no_hc@
    송은희 song_eh@
    유재식 yoo_js@

     

    => 내가 원하는 값은 '@' 포함이 아닌 이전까지의 값이다.

     

     

     

    접근3

    '@'의 이전까지의 값이 필요하니 '@-1'을 해보면 어떨까?

    SELECT EMP_NAME,SUBSTR(EMAIL,1,INSTR(EMAIL,'@-1'))
    FROM EMPLOYEE;

     

     

    결과값 => 실패

    더보기

    선동일 (null)
    송종기 (null)
    노옹철 (null)
    송은희 (null)
    유재식 (null)

     

    => null 값이 출력된다. 

     

    ==> @+1로 바꿔봐도 마찬가지이다. 

     

    이유 : '@-1'은 말그대로 @-1이라는 값을 찾기 때문에 null이 표시된다

     

     

    접근4 

    SUBSTR(STRING,POSITION[,LENGTH])를 활용해서 LENGTH 에 -1을 입력한다면? 

    SELECT EMP_NAME,SUBSTR(EMAIL,1,INSTR(EMAIL,'@')-1)
    FROM EMPLOYEE;

     

     

    결과값 => 성공

    더보기

    선동일 sun_di
    송종기 song_jk
    노옹철 no_hc
    송은희 song_eh
    유재식 yoo_js

     

    => 이메일 전체가 아닌, 아이디만 조회되는 것을 확인했다. 

     

     

     

    <결론>

    1. SUBSTR(STRING,POSITION[,LENGTH]) 즉, STRING,NUM,NUM 데이터 타입을 활용하기

    2. LENGTH에서 문자열로부터 특정 문자의 위치 찾아서 해당 위치값 반환하는 함수인

    INSTR(STRING,'문자'[,찾을위치의 시작값[,순번]])을 활용하기

    3. '@'포함시키지 않기 위해서 찾은 문자열의 위치에서 -1를 빼기 

     

     

     

    +) 21/03/11 추가

     

    새로운 접근 방법을 알게 되었다. 

    바로 RTRIM 함수를 사용하는 것인데,

     

    [복습] RTIM이란?

    더보기

    특정 문자열을 찾아서, 트리밍 ( 제거 ) 해주는 함수로, RTRIM 과 LTRIM이 있다. 각각 오른쪽, 왼쪽 문자열을 제거하는 함수이다. => 더 나아가 양쪽 문자열을 제거하는 TRIM이라는 함수도 있다. 모두 CHAR 타입으로 결과값을 반환한다. 

     

     

    728x90

    댓글