숫자, 날짜, 문자열을 지정한 형식의 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 함수|작성자 이경모




