숫자, 날짜, 문자열을 지정한 형식의 VARCHAR2 문자열로 변환하는 함수이다.
1. 날짜 형식을 변환하는 경우
사용법> TO_CHAR(date, 'fmt')
예> TO_CHAR(hiredate, 'RR/MM/DD') => 81/11/17
특정 포맷(fmt)형식으로 출력할 수 있다.
<날짜 포맷 형식>
구성 요소 |
설명 |
SCC or CC | 세기 : BC 날짜에는 _S를 붙인다. |
Years in dates YYYY or SYYYY | 년 : BC 날짜에는 _S를 붙인다. |
YYY or YY of Y | 년의 마지막 3 또는 2 또는 1자리 수 |
Y, YYY | 콤마가 있는 년 |
IYYY, IYY, IY, I | ISO 표준에 바탕을 둔 4, 3, 2 또는 1자리 수 |
SYSER or YEAR |
문자로 표현된 년; BC날짜에는 _S를 붙인다. |
BC or AD | BC / AD 지시자 |
B.C or A.D | .이 있는 BC/AD 지시자 |
Q | 년의 4분의 1 (Quarter) |
MM | 두 자리 값의 월(숫자) |
MONTH | 월의 Full Name |
MON | 세 자리의 약어로 된 월 이름 |
RM | 로마 숫자 월 |
WW or W | 년이나 월의 주 |
DDD or DD or D | 년, 월 또는 주의 일 |
DAY | 요일의 Full Name |
DY | 세 자리 약어로 된 요일 이름 |
J |
Julian day; BC4713년 12월 31일 이후의 요일 수 |
<시간 포맷 형식>
구성 요소 |
설명 |
AM or PM | 정오 지시자 |
A.M or P.M | .이 있는 정오 지시자 |
HH or HH12 or HH24 | 하루 중 시간 (1~12, 0~23) |
MI | 분(0~59) |
SS | 초(0~59) |
SSSSS | 자정 이후의 초 (0~86399) |
<기타 포맷 형식>
구성 요소 |
설명 |
/ . , | 사용 문자가 결과에 다시 나타난다. |
"of the" | 인용 부호 내의 문자가 결과에 함께 출력 |
<숫자에 영향을 주는 접미사>
구성 요소 |
설명 |
TH | 서수 (DDTH ==> 4TH) |
SP | 명시한 수 (DDSP ==> FOUR) |
SPTH or THSP | 명시한 서수 (DDSPTH ==> FOURTH) |
문제> EMP 테이블에서 10번 부서 중 입사 일자를 '01/05/1981'과 '1998년 1월 1일'의 형태로
출력하여라.
SELECT ename, hiredate, TO_CHAR(hiredate, 'DD/MM/YYYY') eng, TO_CHAR
(hiredate, 'yyyy"년" mm"월" dd"일"') kor
FROM emp
WHERE deptno = 10
ORDER BY hiredate DESC;
ENAME HIREDATE ENG KOR
------------------------------ -------- --------------- ---------------
MILLER 82/01/23 23/01/1982 1982년 01월 23일
KING 81/11/17 17/11/1981 1981년 11월 17일
CLARK 81/06/09 09/06/1981 1981년 06월 09일
2. 숫자 형식을 변환하는 경우
1) 숫자 값을 문자로 변환할 때, 즉 NUMBER형을 VARCHAR2로 전환 할 때 사용.
2) 이 기법은 연결(Concatenation) 시에 유용하다고 한다.
3) 형식에 제공되는 자리수를 초과하는 숫자에 대해서는 #을 출력한다.
<숫자형식 모델>
요소 | 설명 | 예 | 결과 |
9 | 출력폭을 결정. | 999999 |
1234 (값이 6자리가 안되므로 4자리만 나옴) |
0 | 빈자리를 0으로 채움 | 099999 | 001234 |
$ | 달러 기호를 붙임 | $999999 | $1234 |
L | 지역 화폐 기호 | L999999 | \1234 |
. | 명시한 위치에 소수점 | 999999.99 | 1234.00 |
, | 명시한 위치에 콤마 | 999,999 | 1,234 |
MI | 우측에 마이너스 기호 | 999999MI | 1234- (값이 음수일 때만 -로 출력됨.) |
PR | 음수를 <>로 묶음 | 999999PR | <1234> |
EEEE | 지수 부호 표기 | 99.999EEEE | 1.234E+03 |
V | 10을 n번 곱한다. | 9999V99 | 123400 (V뒤에 있는 자리 수대로 곱함. 여기는 두 자리므로 100을 곱한다.) |
B | 0을 공백으로 출력. | B9999.990 | 1234.00 |
문제> EMP 테이블에서 20번 부서 중 급여 앞에 $를 삽입하고 3자리마다 ,를 출력하라.
SELECT ename, sal, TO_CHAR(sal, '$999,999') sal_test
FROM emp
WHERE deptno = 20
ORDER BY sal DESC;
ENAME SAL SAL_TEST
------------------------------ ---------- ------------
SCOTT 3000 $3,000
FORD 3000 $3,000
JONES 2975 $2,975
ADAMS 1100 $1,100
SMITH 800 $800
[출처] TO_CHAR 함수|작성자 이경모