본문 바로가기

Oracle/SQL

SQL 단일행 함수 - 문자함수 (Trim, Rtrim, Ltrim) 문자잘라내기

TRIM, RTRIM, LTRIM ( 특정 철자 잘라내기, 오른쪽 철자 잘라내기, 왼쪽철자 잘라내기 )

select 'smith', ltrim('smith', 's'), rtrim('smith', 'h'). trim ('s' from 'smith')

from dual;

설명 : smith 는 데이터가 없음으로 select 절 다음에 ' smith ' 입력 해 준뒤, LTRIM, PTRIM, TRIM 을 해준다.

ltrim( '단어', '철자') 이고 rtrim 도 마찬가지

but , trim은 (' 철자' from '단어') 순으로 코딩 해 주어야 한다.

 

 

응용문제 : email 에서 도메인을 출력 하시오

trim 을 사용할때 ' 자르는 단어 ' 를 한 뭉텅이로 보는게 아니고 들어가있는 단어 하나하나를 인식하여 다 자른다

ex) rtrim (rtrim (lower(email), '.com'), '.net') 했을때

주소중 ~~~@nate.com 은 —> ~~~@na 라는 식으로 나온다.

앞에 n이 삭제 되지 않은 이유는 a 가 뒤에있어 잘리지 않았음

그래서 . 을 살리고 com, 과 net 만 삭제하게 되면 앞에있는 . 때문에 뒤에 도메인이 삭제는 되지 않는다.

(1) —> rtrim (rtrim (lower(email), 'com'), 'net')

그다음 골뱅이 다음을 잘라내기위해 substr 을 사용한다. substr (컬럼명, 잘라낼 시작자리번호, 몇개 자를지) 

 @ 다음의 자리수를 잘라내기 위해 +1 한다. 

완성된 식 

select rtrim(substr(rtrim(rtrim(email, 'com'),'net'), instr(email, '@')+1),'.')
from emp14;


(4) 마지막에 rtrim 으로 남은 . 을 잘라내준다. 

또는 다른 Sql 식

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

from emp14;


설명 : substr 추출한다 email 을 @ 이 다음숫자부터, 그리고 '.'부터 '@' 이 까지의 사이의 길이 숫자만큼 추출해라  

또는 

select substr( rtrim( rtrim( replace(email,'.net','.com'),'com' ),'.'), instr(email,'@')+1 )

from emp14;