--1)주제 : 변환 함수
-- 이 함수는 오라클의 데이터 출력형식을 변환하는 함수이다
-- 응용프로그램의 함수로 대체하기 어렵다.
-- 오라클은 상식적인 수준의 형 변환은 자동으로 구현한다.
-- 예를 들어 문자 '1'은 연산자를 사용할 경우 숫자 1로 자동으로 치환된다
-- 그러나 특별한 출력 형태를 유지하거나 사용자의 입력을
-- DBMS가 해석해야 하는 경우에는 반드시 변환함수를 사용해야 한다.
--
--2) 날짜 출력 형식
--의미 표현문자 내용
-----------------------------------------------------------------------
--년 YYYY 4자리로 표현된 년도(1999, 2019)
-- YY 2자리로 표현된 년도(99,19)
-- 앞에 2자리는 현재 년도를 이용한다
-- 99년은 2099년을 의미한다.
--
-- RR 2자리로 표현된 년도(99,19)
-- 앞에 2자리는 현재 년도와 가장 가까운 년도
-- 99년은 1999년을 의미한다.
-------------------------------------------------------------------------
--월 MM 2자리 숫자로 표현된 월(03,04)
-- MONTH 영문이나 한글로 표현된 월(MARCH, 3월)
-- MON 약자로 표현된 영문 및 한글월(MAR, 3월)
-- 한글인 경우 MONTH와 동일하다
-------------------------------------------------------------------------
--일 DD 2자릴 숫자로 표현된 일자(01,02)
-- DAY 영문이나 한글 요일(SUNDAY, 일요일)
-- DY 약자료 표현된 요일(SUN,일)
-------------------------------------------------------------------------
--시 HH24 1시에서 24시까지 표현
-- HH 1시에서 12시까지 표현
-- 정확한 표현을 위해 AM/PM을 추가하는 것
-------------------------------------------------------------------------
--분 MI 2자리 분 표시
-------------------------------------------------------------------------
--초 SS 2자리 초 표시
-- SSSSS 하루를 초로 환산한 다음 표현(0-86399)
-------------------------------------------------------------------------
--오전/오후 AM/PM 오전 오후 표기
-- 형식 지정 시에는 둘이 똑같다
--
--3)숫자 출력 형식
--표현문자 내용
-------------------------------------------------------------------------
--9 숫자의 출력 폭지정(자리수가 부족하면 생략)
--0 선행 0표기(자리수를 반드시 맞춘다)
--$ 화폐 표기(달러)
--L 지역 화폐 표기(각 국가 코드에 따라 다르다)
--, 쉼표 위치 지정
--. 마침표 위치 지정
--MI 음수의 -기호를 오른쪽에 표기
--EEEE 실수 표현법을 이용
--
--4)변환 함수의 종류
--
--함수명 기능
--------------------------------------------------------------------------
--TO_CHAR 날짜랑 숫자를 문자로 변환한다
-- 출력 데이터 형식을 지정한다
-- TO_CHAR(날짜, 출력형식)
-- TO_CHAR(숫자, 출력형식)
--------------------------------------------------------------------------
--TO_DATE 데이터를 날짜형으로 해석한다
-- TO_DATE(문자, 해석형식)
--------------------------------------------------------------------------
--TO_NUMBER 데이터를 숫자로 해석한다
-- 대부분의 경우 오라클의 자동 형 변환에 의해
-- 숫자로 읽혀지므로 사용 빈도가 낮다
-- SQL보다 PL-SQL에서 간혹 사용된다.
--------------------------------------------------------------------------
--현재 날짜를 다양한 형식으로 출력한다
SELECT TO_CHAR(sysdate, 'YYYY/MM/DD') 날짜,
TO_CHAR(sysdate, 'YYYY/MM/DD:HH24:MI:SS') 날짜,
TO_CHAR(sysdate, 'YYYY/MM/DD:HH:MI:SS AM') 날짜
FROM dual;
SELECT TO_CHAR(sysdate, 'DD Month YYYY')ToDay
FROM dual;
SELECT TO_CHAR(sysdate, 'DAY Mon YY')ToDay
FROM dual;
SELECT TO_CHAR(sysdate, 'DY Mon YY')ToDay
FROM dual;
SELECT TO_CHAR(sysdate, '"오늘은 " YYYY"년 " MM"월 "DD"일 입니다"') ToDay
FROM dual;
--10번 부서 사원의 입사일을 다음의 형식으로 검색하세요
--ㅇㅇㅇ사원의 입사일은 ㅇㅇㅇㅇ년ㅇㅇ월 ㅇㅇ일입니다.
SELECT ename||'-사원의 입사일은 '|| TO_CHAR(hdate, 'YYYY"년 " MM"월 "DD"일 입니다-"') ToDay
FROM emp
WHERE dno='10';
--다양한 숫자를 출력해보자
SELECT TO_CHAR(12345.678, '999,999.99999') num --뒤에 형식으로 앞 숫자를 나타냄
FROM dual;
SELECT TO_CHAR(12345.678, '099,999.99999') num --자리에 뭐가 없으면 0으로 채운다
FROM dual;
SELECT TO_CHAR(12345.678, '9,9999.9') num --반올림된다
FROM dual;
SELECT TO_CHAR(1234, '$999,999') dollar
FROM dual;
SELECT TO_CHAR(1234, 'L999,999') won --L로컬 화폐
FROM dual;
SELECT TO_CHAR(-1234, '999,999MI') num
FROM dual;
SELECT TO_CHAR(123456789, '9.999EEEE') num
FROM dual;
--10번 부서사원의 보너스가 급여의 몇퍼센트인지 검색한다
--급여는 월간 급여이고 보너스는 연간 보너스이다
--보너스가 null인 경우 0으로 환원해서 검색한다
SELECT eno, ename, TO_CHAR(NVL(comm,0)/(sal*12)*100, '99')||'%' 급여비율
FROM emp
WHERE dno='10';
--1992년 이전에 입사한 사원의 정보를 검색해라
SELECT eno, ename, hdate
FROM emp
WHERE hdate < TO_DATE('1992/01/01', 'YYYY/MM/DD');