본문 바로가기
Programming/SQL

[Oracle] 12. 다양한 변환함수(TO_CHAR, TO_DATE, TO_NUMBER)

by 고막고막 2019. 4. 23.
TO_CHAR 날짜와 숫자를 문자로 변환한다, 출력데이터 형식을 지정한다.
TO_CHAR(날짜, 출력형식), TO_CHAR(숫자, 출력형식)
TO_DATE 데이터를 날짜형으로 해석한다.
TO_DATE(문자, 해석형식)
TO_NUMBER 데이터를 숫자로 해석한다.
대부분의 경우 오라클의 자동형변환에 의해 숫자로 읽혀지므로 사용빈도가 낮다.
SQL보다 PL-SQL에서 간혹 사용된다.

 

예제1) 현재 날짜를 다양한 형식으로 출력한다

SELECT TO_DATE(sysdate, 'YYYY/MM/DD') date1,
       TO_DATE(sysdate, 'YYYY/MM/DD:HH24:MI:SS') date2,
       TO_DATE(sysdate, 'YYYY/MM/DD:HH:MI:SS AM') date3 FROM dual;

SELECT TO_DATE(sysdate, 'YYYY/MM/DD') Today FROM dual;

SELECT TO_DATE(sysdate, 'DAY Mon YY') Today FROM dual;

SELECT TO_DATE(sysdate, '"오늘은 "YYYY"년 "MM"월 "DD"일 입니다."') Today FROM dual;

예제2) 다양한 숫자를 출력해보자

SELECT TO_CHAR(12345.6789, '999,999.9999') num FROM dual;

SELECT TO_CHAR(12345.6789, '$999,999') dollar FROM dual;

SELECT TO_CHAR(12345.6789, 'L999,999') won FROM dual;

// MI: 음수의 -기호를 오른쪽에 표기
SELECT TO_CHAR(-1234, '999,999MI') num FROM dual;

// EEEE: 실수 표현법을 이용
SELECT TO_CHAR(123456789, '9.999EEEE') num FROM dual;

예제3) 10번부서 사원의 보너스가 급여의 몇 퍼센트인지 검색(급여는 월간 급여이고 보너스는 연간 보너스이다. 보너스가 null인 경우 0으로 환원해서 검색한다)

SELECT eno, ename, TO_CHAR(NVL(comm, 0)/(sal*12)*100, '099.99')||'%' 급여비율
FROM emp WHERE dno=20;

예제4) 1992년 이전에 입사한 사원의 정보를 검색

// 문자열을 데이트 자료형으로 바꿔줌으로 비교가 가능하다
SELECT eno, ename, hdate
FROM emp WHERE hdate < TO_DATE('1992/01/01', 'YYYY/MM/DD');