[Oracle] 단일행 함수 - 문자 함수
함수 (function)
함수(function) 란, 어떤 특정 한 가지 기능을 수행하는 코드의 모음이다.
함수를 알아야 하는 이유는 데이터로부터 알고 싶은 정보를 뽑아낼 때, 쉽게 뽑아낼 수 있도록 해주기 때문이다.
오라클 함수의 종류
- 단일행 함수
- 문자 함수 : upper, lower, initcap, substr, instr, length, replace, lpad, rpad, trim, rtrim, ltrim
- 숫자 함수 : round, trunc, mod
- 날짜 함수 : months_between, add_months, next_day, last_day
- 변환 함수 : to_char, to_number, to_date
- 일반 함수 : nvl, decode, case
- 복수행 함수 : max, min, avg, sum, count
문자 함수
- upper : 데이터를 대문자로 출력
- lower : 데이터를 소문자로 출력
- initcap : 데이터의 첫 번째 철자는 대문자, 나머지는 소문자로 출력
- substr : 문자에서 특정 자리의 철자들을 추출
- length : 문자열의 길이 출력
- instr : 문자에서 특정 철자의 위치 출력
- replace : 특정 철자를 다른 철자로 변경
- lpad, rpad : 특정 철자를 N개 만큼 채우기
- trim, ltrim, rtrim : 특정 철자 잘라내기
예제1. 이름을 다음과 같이 출력
KING | king | King |
select upper(ename), lower(ename), initcap(ename)
from emp;
예제 2. 이름을 앞의 3자리만 출력
select ename, substr(ename, 1, 3)
from emp;
regexp_substr 은 regular expression (정규 표현식) 을 사용할 수 있는 substr 함수다.
regexp_substr 를 이용하면 어절 단위로 잘라낼 수 있다.
select ename, regexp_substr(address, '[^ ]+', 1)
from emp;
^ 은 not 으로 아니다 라는 뜻이고, [^ ] 은 공백이 아닌 것이라는 뜻이다.
뒤에 + 는 여러 개가 있을 수 있다는 뜻이다.
따라서 [^ ]+ 의 뜻은 공백이 아닌 것이 여러 개 있는 것이다.
select ename, regexp_substr(address, '[^ ]+', 1, 2)
from emp;
어절인 것을 첫 번째부터 찾아서 두 번째인 것을 뽑는다.
예제 3. 이름과 이름의 길이를 출력
select ename, length(ename)
from emp;
예제 4. 이름과 이름에서 알파벳 M이 포함되어져 있다면 몇 번째 자리인지 출력
select ename, instr(ename, 'M')
from emp;
예제 5. 이름과 월급을 출력하는데, 월급을 출력할 때 숫자 0 을 * 로 출력
replace(컬럼명, 변경 전 철자, 변경 후 철자)
regexp_replace(컬럼명, 변경 전 철자, 변경 후 철자)
select ename, replace(sal, 0, '*')
from emp;
예제 6. 이름과 월급을 출력하는데, 월급을 출력할 때 숫자 0부터 3까지를 * 로 출력
select ename, regexp_replace(sal, '[0-3]', '*')
from emp;
‘[0-3]’는 숫자 0부터 3까지를 의미한다.
예제 7. 이름과 월급을 출력하는데, 월급을 출력하고 나머지 자리에 다른 숫자가 임의로 적히지 않도록 * 로 채워 넣기
select ename, lpad(sal, 10, '*')
from emp;
select ename, rpad(sal, 10, '*')
from emp;
월급을 출력하는데 전체 10자리를 잡아서 월급을 출력하고, 나머지 자리에 별표(*)를 채워 넣는다.
예제 8. 이름이 jack 인 사원의 이름과 월급을 출력
insert into emp(empno, ename, sal)
values(3921, ' jack ', 3400);
select ename, sal
from emp
where trim(ename) = 'jack';
trim() 은 데이터 양쪽의 공백을 잘라 버리겠다는 뜻이다.