문자열 함수
- 컬럼에 저장되 있는 문자열에 대해 처리를 하여 값을 가져올 수 있는 함수들을 의미한다.
- http://docs.oracle.com/cd/B19306_01/server.102/b14200/functions001.htm
ex)
-- 대문자--> 소문자
select lower('ABcdef')
from dual;
결과값 : abcdef
ex)
-- 사원들의 이름을 소문자로 가져온다.
select lower(ename)
from emp;
ex)
-- 소문자 --> 대문자
select upper('abCDEF')
from dual;
결과값 : ABCDEF
ex)
-- 첫 글자만 대문자로, 나머지는 소문자로
select initcap ('aBCDEF')
from dual;
결과값 : Abcdef
ex)
-- 사원이름을 첫 글자는 대문자로 나머지는 소문자로 가져온다.
select initcap(ename)
from emp;
ex)
-- 문자열 연결
select concat(concat('kkk', concat('abc', 'def')), 'zzz')
from dual;
결과값 : kkkabcdefzzz
ex)
-- 사원들의 이름과 직무를 다음과 같이 가져온다.
-- 사원의 이름은 ㅇㅇㅇ이고, 직무는 ㅇㅇㅇ입니다.
select concat(concat(concat(concat('사원의 이름은',ename), '이고, 직무는 '), job),'입니다.')
from emp;
select '사원들의 이름은'||ename||'이고, 직무는'|| job||'입니다.'
from emp;
ex)
-- 문자열의 길이 lenth는 글자수, lengthb는 바이트 수를 가져온다. 영어의 경우 한글자의 수가 1바이트로 동일하므로 동일한 결과값을 가져온다. 그러나 한글은 한글자당 2바이트 이르모 lengthb를 사용할 경우 length값의 2배 값을 가져온다.
그러므로 한글을 사용할경우 length를 사용하는 경우가 많다.
select length('abcd'), lengthb('안녕하세요')
from dual;
결과값 : 4, 10
ex)
-- 문자열 잘라내기(문자열의 길이와 마찬가지고 바이트 단위로 잘린다.)
select substr('안녕하세요', 3), substrb('안녕하세요', 3)
from dual;
결과값 : 하세요, 녕하세요
왼쪽부터 3번째 글자수 부터 출력, 왼쪽 부터 3바이트 이후부터
ex)
select substr('abcdefghi', 3, 4), substr('동해물과 백두산이', 3, 4)
from dual;
결과값 : cdef, 물과 백
왼쪽부터 3번째 글자수 부터 출력 하여 4글자 출력
ex)
-- 문자열 찾기
select instr('abcdabcdabcd', 'bc'), instr('abcdabcdabcd', 'bc', 3), instr('abcdabcdabcd', 'bc', 3, 2)
from dual;
결과값 : 2, 6, 10
bc의 첫번째 위치, 3번째 글자 이후 부터의 bc, 3번째 글자 이후 부터의 2번째 bc
없는 것은 0이 나온다.
ex)
-- 사원의 이름 중에 A라는 글자가 두번째 이후에 나타나는 사원의 이름을 가져온다.
select ename
from emp
where instr(ename, 'A') >1;
ex)
-- 특정 문자열로 채우기
select '문자열', lpad('문자열', 20), rpad('문자열', 20),
lpad('문자열', 20, '_')
from dual;
결과값 : 문자열, 문자열, 문자열 , ______________문자열
ex)
-- 공백제거
select ltrim(' 문자열 '), rtrim(' 문자열 '),trim(' 문자열 ')
from dual;
결과값 : 문자열 , 문자열, 문자열
ex)
-- 문자열 변경
select replace('abcdefg','abc','kkkkkk')
from dual;
결과값 : kkkkkkdefg