출력 데이터 형식을 지정
>> TO_CHAR(날짜, 출력형식), TO_CHAR(숫자, 출력형식)
출력형식
- YYYY : 네 자리로 표현된 년도 (1999, 2021, ...)
- YY : 두 자리로 표현된 년도 (99, 21, ...)
앞에 두 자리는 현재 년도를 이용
2021년 현재 99년을 YY로 표현하면 2099년을 의미- RR : 두 자리로 표현된 년도.
2021년 현재 99년을 RR로 표현하면 1999년을 의미.- MM : 두자리 숫자로 표현된 월 (01, 02, ...)
- MONTH : 영문이나 한글로 표현된 월 (MARCH, APRIL, 3월, 4월, ...)
소문자'month'로 작성하면 월 조회도 소문자로 조회된다. (march, april, ...)- MON : 약자로 표현된 영문 및 한글 월 (MAR, APR, 3월, 4월, ...)
- W : 이번 달의 몇번째 주인지
- WW : 이번 년의 몇번째 주인지
- D : 이번 주의 몇번째 일자인지
- DD : 두 자리 숫자로 표현된 일자 (01, 02, ...)
- DDD : 이번 년의 몇번째 일자인지
- DAY : 영문이나 한글 요일(SUNDAY, MONDAY, 일요일, 월요일, ...)
- DY : 약자로 표현된 요일 (SUN, MON, 일, 월, ...)
- HH24 : 1~24시로 표현
- HH : 1~12시로 표현. 정확한 표현을 위해 AM/PM 을 추가하는 것이 좋다.
- MI : 두자리 분 표시
- SS : 두자리 초 표시
- SSSSS : 하루를 초로 환산하여 표현
- AM / PM : 오전 / 오후 표기
>> TO_DATE(문자, 해석형식)
대부분의 경우 오라클의 자동 형 변환에 의해 숫자로 읽을 수 있는 문자는 숫자로 자동 형변환 되므로 사용 빈도가 낮음
SQL보다는 PLSQL 등에서 쓰임.
숫자로 변경시 앞에 공백 1자리가 생기는데, 이는 양의 부호(+)가 생략되면서 생겨난 자리이다.
이 공백을 제거하기 위해 FM 명령어를 쓴다.
현재 날짜를 다양한 형식으로 출력
SELECT TO_CHAR(SYSDATE, 'YYYY/MM/DD') 날짜1
,TO_CHAR(SYSDATE, 'YYYYMMDD') 날짜2
,TO_CHAR(SYSDATE, 'YYYY/MM/DD:HH24:MI:SS') 날짜3
,TO_CHAR(SYSDATE, 'YYYYMMDD:HH24:MI:SS') 날짜4
,TO_CHAR(SYSDATE, 'YYYY/MM/DD:HH:MI:SS AM') 날짜5
FROM DUAL;
SELECT TO_CHAR(SYSDATE, 'DD Month YYYY') 오늘 FROM DUAL;
SELECT TO_CHAR(SYSDATE, 'DAY Mon YY') TODAY FROM DUAL;
SELECT TO_CHAR(SYSDATE, '"오늘은 "YYYY"년 "MM"월 "DD"일 입니다."') 날짜 FROM DUAL;
10번 부서 사원의 입사일을 다음의 형식으로 검색한다
'XXX 사원의 입사일은 XXXX년 XX월 XX일입니다.'
SELECT ENAME || ' 사원의 입사일은 ' ||
TO_CHAR(HDATE, 'YYYY"년 "MM"월 "DD"일 입니다."') 입사일
FROM EMP
WHERE DNO = '10';
다양한 형식으로 숫자를 출력해보자
SELECT TO_CHAR(12345.678, '999,999.9999') NUM FROM DUAL;
SELECT TO_CHAR(12345.678, '099,999.9999') NUM FROM DUAL;
10번 부서 사원의 보너스가 급여의 몇 퍼센트인지 검색
급여는 월간 급여, 보너스는 연간 보너스, 보너스가 NULL인경우 0으로 환산
SELECT ENO, ENAME
,TO_CHAR(NVL(COMM, 0)/(SAL*12)*100 , '00.99')
|| '%' 보너스비욜
FROM EMP
WHERE DNO = '10';
1992년 이전에 입사한 사원의 정보 검색
SELECT ENO 사번, ENAME 이름, HDATE 입사일
FROM EMP
WHERE HDATE< TO_DATE('19920101', 'YYYYMMDD');
SELECT SNAME || ' 학생의 평균 평점은 ' || TO_CHAR(AVR, '0.99') || '입니다.'
FROM STUDENT;
SELECT *
FROM PROFESSOR
WHERE TO_CHAR(HIREDATE, 'MM') = '03';
SELECT SNAME || ' 학생의 4.5 환산 평점은 ' || TO_CHAR(AVR, '0.99') || '입니다.'
FROM STUDENT;