프로그래밍/Oracle

[Oracle] 단일행 함수 - 문자 함수

eunki 2022. 5. 25. 17:58
728x90

함수 (function)

함수(function) 란, 어떤 특정 한 가지 기능을 수행하는 코드의 모음이다.

함수를 알아야 하는 이유는 데이터로부터 알고 싶은 정보를 뽑아낼 때, 쉽게 뽑아낼 수 있도록 해주기 때문이다.

 

 

 

오라클 함수의 종류

  1. 단일행 함수
    1. 문자 함수 : upper, lower, initcap, substr, instr, length, replace, lpad, rpad, trim, rtrim, ltrim
    2. 숫자 함수 : round, trunc, mod
    3. 날짜 함수 : months_between, add_months, next_day, last_day
    4. 변환 함수 : to_char, to_number, to_date
    5. 일반 함수 : nvl, decode, case
  2. 복수행 함수 : 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() 은 데이터 양쪽의 공백을 잘라 버리겠다는 뜻이다.

728x90