개발(Web)/DB

[Oracle] 단일 행 함수 (2)

shinyelee 2020. 6. 30. 12:50

단일 행 함수 중 변환함수, 일반함수에 대해 알아보자.

Ⅴ. 변환함수

1. to_char 함수

가. date → char

요소 설명
YYYY / RRRR / YY / YEAR 연도 : 숫자 4자리 / 숫자 4자리 / 숫자 2자리 / 문자
MONTH / MON / MM / RM 월 : 풀네임 / 약어(3글자) / 숫자 2자리 / 로마자
DDD / DD / D / DDTH 일 : 1년 기준 / 1달 기준 / 1주 기준 / 몇 번째 날인지(TH)
Q 분기.
DAY / DY 요일 : 풀네임 / 약어(3글자)
HH(12) / HH24 시간 : 12시간(※오전 오후 구분 없음) / 24시간
AM / PM 시간 : 오전 / 오후
MI 시간 : 분
SS 시간 : 초

본래 날짜 출력 방식은 DD-MON-RR. to_char 써서 MM/YY로 변경.
요소, 대소문자 여부에 따라 날짜 표현 방식이 달라진다.
따옴표 사용에 유의. today == now

* alias와 to_char 외에는 큰 따옴표("")를 사용하지 않는다.

추가 예시1.
추가 예시2.

나. number → char

요소 설명
9 9의 개수만큼 자리수 표시(숫자).
0 빈자리를 0으로 채움.
$ 부동 달러 기호 배치.
L 부동 로컬 통화 기호 사용.
. 소수점 출력.
, 천단위 표시자로 쉼표 출력.

예시.

2. to_number 함수

* 잘 안 써서 PASS.

3. to_date 함수

예시.


Ⅵ. 일반함수

1. nvl 함수

* null 값을 실제 값으로 변환.

  사용할 수 있는 데이터 유형 : 날짜, 문자, 숫자.

  데이터 유형이 일치해야 함.

commission_pct 받지 않는 직원은 해당값 null → annual salary 계산시 null 때문에 연봉 계산이 안 되는 문제가 발생함.
이 때 nvl 함수로 null → 0으로 바꿔 계산할 수 있다.

2. nvl2 함수

* 첫 번째 표현식을 검사해서 null이 아니면 두 번째 표현식 반환.

  첫 번째 표현식을 검사해서 null이면 세 번째 표현식 반환.

예시. 커미션 컬럼을 검사(빨강)해서 커미션을 받으면 'sal+comm' 출력(파랑). 온리 월급만 받으면 'sal' 출력(검정).

3. nullif 함수

* 첫 번째 표현식(빨강)과 두 번째 표현식(파랑)의 값이 같으면 null을 반환한다.

  첫 번째 표현식과 두 번째 표현식의 값이 다르면 첫 번째 표현식의 값을 반환한다.

expr1 == first_name 글자 수(빨강), exp2 == last_name 글자 수(파랑). exp1과 exp2를 비교해 결과를 result에 출력(검정).
John Chen은 expr1(4) == expr2(4)이므로 result에 null 반환. 나머지 직원은 expr1 값을 반환한다.

4. coalesce 함수

* nvl 함수보다 여러 대체값을 가질 수 있음.

  null이 아닌 첫 번째 표현식 반환.

커미션 값 있으면 출력(빨강) → 커미션 값 null이면 매니저ID 값 출력(파랑) → 매니저ID 값 없으면 'no comm no mgr' 출력.
to_char 쓴 이유 : 'no comm no mgr'가 문자라서.  데이터형식 통일 위해 앞 2개를 문자로 바꾼다(문자를 숫자로 못 바꾸니까).


Ⅶ. 연습문제

1. employees 테이블로부터 다음과 같이 출력하는 보고서를 작성하시오.

* 컬럼 Alias : Dream Salaries

* 출력 형식 : [last_name] earns [salary] monthly but wants [salary*3].

' '(작은 따옴표), to_char 등 씀.

2. employees 테이블로부터 사원들의 last_name과 commission_pct를 출력하되 커미션을 받지 않는 사원들은 "No Commission"이라고 출력하는 구문을 작성하시오.

nvl, to_char 씀.

출처 : 아이티윌 부산교육센터 Oracle Database 12c : 실습가이드북

반응형