TO_CHAR는 날짜, 숫자, 문자 값을 지정한 형식의 VARCHAR2 타입 문자열로 변환하는 함수입니다.
SELECT TO_CHAR(SYSDATE, 'YY'),
TO_CHAR(SYSDATE, 'YYYY'),
TO_CHAR(SYSDATE, 'MM'),
TO_CHAR(SYSDATE, 'MON'),
TO_CHAR(SYSDATE, 'YYYYMMDD') 응용적용1,
TO_CHAR(TO_DATE('20171008','YYYYMMDD), 'YYYYMMDD') 응용적용2
FROM dual;

특정 열의 행에 대한 데이터 값이 없다면 데이터 값은 null이 됩니다. null은 그 자체로 의미가 있는데 ‘값이 없다’는 것을 나타내는 값입니다. 테이블을 정의할 때 null 값을 가지지 못하도록 지정할 수도 있습니다. 이런 경우를 not null이라고 합니다.
null 값은 다음과 같은 특징이 있습니다.
할당되지 않았거나 알려져 있지 않아 적용이 불가능한 값입니다.
0이나 공백(space)과는 다릅니다.
null 값을 포함하는 산술 연산의 결과는 null입니다.
salary * commission_pct는 ‘salary 열과 commission_pct 열을 곱하라’는 의미입니다.
commission_pct 열의 데이터 값이 null이 아닐 때는 제대로 계산되지만 null일 때는 null로 처리되었습니다.
경우에 따라 null 값을 다른 값으로 처리해야 할 때가 있습니다.
예를 들어 앞의 예와 같이 salary 열에 모두 곱셈 처리를 하고 싶은데 commission_pct 열의 데이터 값이 null인 데이터는 제대로 계산되지 않습니다.
데이터 값에 null을 곱하면 결과가 null이 되기 때문입니다. 이럴 때는 NVL 함수를 사용합니다.
SELECT salary * NVL(commission_pct, 1)
FROM hr.employees
ORDER BY commission_pct;

SELECT *
FROM hr.employees
ORDER BY commission_pct;
commission_pct에 대해 오름차순으로 정렬하여 출력하였습니다.

SELECT SALARY * COMMISSION_PCT
FROM HR.EMPLOYEES
ORDER BY COMMISSION_PCT;

DECODE는 프로그래밍을 해 본 사람이라면 들어 본 적이 있을 IF-THEN-ELSE-END의 조건 논리를 가능하게 하는 함수입니다. 데이터 값이 조건 값과 일치하면 치환 값을 출력하고 일치하지 않으면 기본값을 출력합니다.
SELECT first_name,
last_name,
department_id,
salary 원래급여,
DECODE(department_id, 60, salary*1.1, salary) 조정된급여,
DECODE(department_id, 60, '10%인상', '미인상') 인상여부
FROM hr.employees;

같이 DECODE 함수는 산술 계산 외에 문자열 표현도 가능하며 다양한 형태로 응용하여 활용할 수 있습니다. 또한 DECODE(열 이름, 조건 값 1, 치환 값 1, 조건 값 2, 치환 값 2, …, 기본값) 형태로 조건 논리를 계속 이어 나갈 수 있습니다.
DECODE 함수는 특정 조건을 만족하는 경우에 값을 변경하여 출력하고자 할 때 유용합니다.
복잡한 조건식을 여러 개 적용해야 할 때는 DECODE 함수보다 CASE 표현식을 이용하는 것이 유용할 수 있습니다.
DECODE 함수는 데이터 값이 정확히 맞거나 틀린 조건을 처리하기 쉬운 반면 CASE 함수는 조건의 범위가 다양한 경우에 쉽게 처리할 수 있습니다.
SELECT employee_id , first_name, last_name,salary,
CASE
WHEN salary >= 9000 THEN '상위급여'
WHEN salary BETWEEN 6000 AND 8999 THEN '중위급여'
ELSE '하위급여'
END AS 급여등급
FROM HR.employees
where JOB_ID = 'IT_PROG'

CASE 문은 매우 다양하게 활용할 수 있는데 예제와 같이 숫자에 대한 구간 등급을 나누어 표현하는 것은 물론 나이, 지역, 날짜를 구분하여 출력하고자 할 때도 얼마든지 응용할 수 있습니다.