2020. 5. 2.

[Oracle] 13. 단일 행 함수 : 문자 함수 정리


단일 함수의 종류

  • 문자 함수
  • 숫자 함수
  • 날짜 함수
  • 변환 함수
  • 일반 함수

문자 함수

대소문자 변환 함수

함수명
기능
lower
문자열을 소문자로 변환한다.
lower(문자열)
lower('ORACLE') -> oracle
upper
문자열을 대문자로 변환한다.
upper(문자열)
upper('orcle') -> ORACLE
initcap
문자만 대문자로 변환하고 나머지는 소문자로 변환한다.
initcap(문자열)
initcap('orAcleE') -> Oracle

예제 1. erp 부서가 있는 지역을 검색한다.

select loc erp_부서_지역
from dept
where lower(dname)='erp';



예제 2. 'XX 부서는 XX 위치합니다.' 형식으로 부서 정보를 검색한다.

select initcap(dname) || ' 부서는 ' || loc || ' 위치합니다.' 부서_위치
from dept;


문자 연산 함수

함수명
기능        
concat
두개의 문자열을 연결한다. (연결 연산자와 비슷한 기능을 수행한다.)
concat(문자열1, 문자열2)
concat('','시현') -> 문시현
substr
문자열 내에 지정된 위치의 문자열을 반환한다.
substr(문자열, 시작위치, [출력문자의 개수])
substr('oracle', 1, 2) -> or
length
(lengthb)
문자열의 길이나 byte 반환한다.
length(문자열)
lengthb(문자열)
length('오라클') -> 3
lengthb('오라클') -> 6
instr
지정된 문자의 위치를 반환한다.
instr(문자열, 검색문자, [시작위치, [횟수]]
instr('oracle', 'a') -> 3
trim
접두어나 접미어를 잘라낸다.
trim([leading | trailing | both] 제외 문자 from 문자열)
제외문자를 지정하지 않으면 공백문자를 잘라낸다.
trim('o', from 'oracle') -> racle
lpad, rpad
지정된 문자열의 길이만큼 부분에 문자를 채운다.
lpad(문자열, 출력폭, 채움문자)
lpad('2000', '10', '*') -> *****20000

예제 3. 부서의 명과 위치를 하나의 컬럼으로 검색

select concat(dname,' ' || loc) concat from dept;


예제 4. 부서명과 문자열의 길이를 출력

select dname, length(dname), length(dname) from dept;


예제 5. substr 함수를 이용해서 컬럼에 일부 내용만을 검색한다.

select ename, substr(ename,2), substr(ename, -2), substr(ename,1,2), substr(ename,-2,2)
from emp;


예제 6. 다양한 방법으로 'a' 나오는 위치를 출력한다.

select instr('database','a'), instr('database','a',3), instr('database','a',1,3)
from dual;


예제  7. trim 함수를 이용 다양한 방법으로 문자열을 검색한다.

select trim('' from '남기남'), trim(leading '' from '남기남'), trim(trailing '' from '남기남'), trim(' 남기남 ')
from dual;


예제 8. 이름과 급여를 각각 10 컬럼으로 검색한다.

select rpad(ename, 10, '*'), lpad(sal, 10, '*') from emp;


예제 9. 부서명의 마지막 글자를 제외하고 검색한다.

select dname, substr(dname, 1, length(dname) -1) dname
from dept;


함수명
기능
translate
문자 단위 치환된 값을 반환한다.
translate(문자열, 검색문자, 치환문자)
translate('oracle','a','#') -> or#cle
replace
문자열 단위 치환된 값을 반환한다.
replace(문자열, 검색문자열, 치환문자열)
replace('oracle','or','##') -> ##acle

예제 10. 형식이 비슷한 translate replace 동일한 치환을 통해 비교해 보자

select translate('World of Warcraft', 'Wo', '--') translate,
replace('World of Warcraft', 'Wo', '--') replace
from dual;


실습 ( 모두 단일 함수를 이용한다.)

 1. 이름이 글자인 학생의 이름을 검색한다.

select sname
from student where 2 = length(sname);

#length sname 컬럼에서 글자수를 세준다.


 2. '' 성을 가진 학생의 이름을 검색한다.

select sname
from student
where '' = substr(sname,0,1);

# substr sname 컬럼에서 첫번째자리인 0부터 1개의 글자를 출력해준다.


 3. 교수의 지위를 한글자로 검색한다. (ex. 조교수 ->)

select pname, substr(orders,0,1)
from professor
where orders = '조교수';

# substr 통해 조만을 출력한다.


 4. 일반 과목을 기초 과목으로 변경해서 모든 과목을 검색한다. (ex. 일반화학 -> 기초화학)

select replace(cname,'일반','기초')
from course
where cname like '%일반%';

# replace 쓰면 해당 글자를 원하는 글자로 바꾸어 출력 가능하다.


 5. 만일 입력 실수로 student 테이블의 sname 컬럼에 데이터가 입력될 문자열 마지막에 공백이 추가 되었다면 검색할 이를 제외하고 검색하는 select문을 작성한다.

select trim(sname)
from student;


 6. 직원의 년봉을 10자리로 검색한다. 공백은 임의의 채움 문자로 채워 넣는다.

select ename, lpad((sal*12+nvl(comm,0)),10,'*')
from emp;

# 공백 문자를 없애는 nvl ( 보너스가 널값일수도 잇다.)
# 연봉을 만들기 위해 월급을 12 곱하고 보너스를 더한다.
# lpad 정해진 글자만큼 출력하고 공백일 경우 * 치환


 7. 학생의 이름을 검색한다. 성이 '' 학생은 성을 '사마' 바꾸어 검색한다.

select replace(sname,'','사마')
from student
where '' = substr(sname,0,1);


댓글 없음:

댓글 쓰기