Oracle SQL 강좌
Conversion Functions (변환 함수) 16 15 99,999+

by 김정식 CAST CONVERT TO_CHAR TO_DATE TO_NUMBER [2002.01.20]


TO_CHAR

TO_CHAR 함수는 DATE형, NUMBER형을 문자 타입으로 변환하는 함수이다. TO_CHAR(number), TO_CHAR(number, format), TO_CHAR(date, format) 형식으로 사용할 수 있다.

Number Format의 변환 예제

NUMBER 타입의 데이터를 아래와 같이 특정 형식의 문자 타입으로 변환 할 수 있다.

-- 콤마 예제
SELECT TO_CHAR(12345678,'999,999,999') comma FROM DUAL;

-- 소숫점 예제  
SELECT TO_CHAR(123.45678,'999,999,999.99') period FROM DUAL; 

-- $ 표시 예제
SELECT TO_CHAR(12345678,'$999,999,999') dollar  FROM DUAL;

-- Local 화폐 표시 예제 (한국의 경우 ₩로 자동 변환 됨)
SELECT TO_CHAR(12345678,'L999,999,999') local  FROM DUAL;

-- 왼쪽에 0을 삽입
SELECT TO_CHAR(123,'09999') zero FROM DUAL;  

-- 16진수로 변환
SELECT TO_CHAR(123,'XXXX') hexadecimal  FROM DUAL;

[표 1] 주요 Number Format Elements
Format 설명
, (comma) 9,999 콤마 형식으로 변환
. (period) 99.99 소수점 형식으로 변환
0 09999 왼쪽에 0을 삽입
$ $9999 $ 통화로 표시
L L9999 Local 통화로 표시(한국의 경우 \)
XXXX XXXX 16진수로 표시

Date Format의 변환 예제

DATE 타입의 데이터를 아래와 같이 특정 형식의 문자 타입으로 변환 할 수 있다.

-- 년,월,일,시,분,초 예제
SELECT TO_CHAR(SYSDATE, 'YYYY-MM-DD HH24:MI:SS') "sysdate" 
FROM DUAL;

-- 365일 중 몇 일째인지 조회
SELECT TO_CHAR(SYSDATE, 'DDD') "Day of year" FROM DUAL;

-- 53주 중 몇 주차 인지 조회
SELECT TO_CHAR(SYSDATE, 'IW') "Week of year" FROM DUAL;

-- 해당 월의 이름 조회
SELECT TO_CHAR(SYSDATE, 'MONTH') "Name of month" FROM DUAL;

[표 2] 주요 Date Format Elements
Format 설명 Format 설명
YYYY 4자리 연도 YY 두자리 연도
D Day of week (1-7) DAY 요일(월,화..)
DD Day of month (1-31) DDD Day of year (1-366)
MM 해당월을 01~12로 표시 MONTH Name of month
WW Week of year (1-53) IW Week of year (1-53) 국제 표준
W Week of month (1-5) HH24 Hour of day (0-23)
HH Hour of day (1-12) MI Minute (0-59)
SS Second (0-59)

"WW"와 "IW" 모두 1년의 몇 주차(1~53)로 조회하는 포맷이지만 "WW" 포맷은 무조건 1일에서 7일까지가 1주차로 시작을 하며, "IW" 포맷은 실제 달력에 맞게 주차가 계산된다.

TO_DATE

  • - TO_DATE 함수는 CHAR, VARCHAR2형을 DATE 타입으로 변환한다.
  • - TO_DATE(char, format) 형식으로 사용 할 수 있다.
  • - [표 2] 주요 Date Format Elements 에서 'W', 'WW' Format을 제외한 나머지는 TO_DATE 함수의 format으로 사용 할 수 있다.
-- DATE 타입으로 변환하는 예제
SELECT TO_DATE('2011-01-01','RRRR-MM-DD') FROM DUAL;

TO_NUMBER

  • - TO_NUMBER 함수는 CHAR, VARCHAR2의 데이터 타입을 숫자형식으로 변환 한다.
  • - TO_ NUMBER(char) 형식으로 사용 할 수 있다.
-- 문자를 숫자로 변환하는 간단한 예제이다.
SELECT TO_NUMBER('01210616') FROM DUAL; 

Oracle Conversion Functions

ASCIISTR
BIN_TO_NUM
CAST
CHARTOROWID
COMPOSE
CONVERT
DECOMPOSE
HEXTORAW
NUMTODSINTERVAL
NUMTOYMINTERVAL
RAWTOHEX
RAWTONHEX
ROWIDTOCHAR
ROWIDTONCHAR
SCN_TO_TIMESTAMP
TIMESTAMP_TO_SCN
TO_BINARY_DOUBLE
TO_BINARY_FLOAT
TO_CHAR (character)
TO_CHAR (datetime)
TO_CHAR (number)
TO_CLOB
TO_DATE
TO_DSINTERVAL
TO_LOB
TO_MULTI_BYTE
TO_NCHAR (character)
TO_NCHAR (datetime)
TO_NCHAR (number)
TO_NCLOB
TO_NUMBER
TO_DSINTERVAL
TO_SINGLE_BYTE
TO_TIMESTAMP
TO_TIMESTAMP_TZ
TO_YMINTERVAL
TO_YMINTERVAL
TRANSLATE ... USING
UNISTR

참고링크

- 강좌 URL : http://www.gurubee.net/lecture/1027

- 구루비 강좌는 개인의 학습용으로만 사용 할 수 있으며, 다른 웹 페이지에 게재할 경우에는 출처를 꼭 밝혀 주시면 고맙겠습니다.~^^

- 구루비 강좌는 서비스 제공을 위한 목적이나, 학원 홍보, 수익을 얻기 위한 용도로 사용 할 수 없습니다.

by 박병덕 [2005.07.01 10:16:46]
TO_MULTY_BYTE 대한 설명 부탁드려도 될까요?
일하다가 버그 잡으려는 데 몰라서리..
부탁드립니다.

by smile [2005.11.09 20:13:58]
퍼갑니다. ^^

by 시근땀 [2006.03.17 16:45:18]
SELECT TO_CHAR(SYSDATE, 'MONTH') CHARTEST FROM dual ;

이렇게 하니까,

CHARTEST
--------------
MARCH

가 나오는데요, 뭔가 잘못된 것 아닐까요? ㅠㅠ

by 김철규 [2006.03.20 21:45:34]
잘못된거 없는거 같은데요! 근땀님이 현재 날짜에 대한 달을 출력했으니까
그렇게 뜨는게 맞죠!

by 백작오빠 [2006.05.12 20:18:37]
숫자로 나오게 하려면 to_char(sysdate, 'mm')로 하시면 되겠죠.

by 오라초보 [2006.09.20 19:14:17]
select ename, TO_CHAR(HIREDATE, 'fmDD-MM-YY') HIREDATE FROM EMP;
에서 fm이 의미하는 바가 뭔지요???

by 엽 [2006.09.26 17:13:28]
fm 을 넣으면 1이면 01 이 됩니다.
한자리수에 0을 채워 줍니다.

by 엽 [2006.09.26 17:15:13]
TO_CHAR(SYSDATE, 'YYYY/MONTH/day') 여러 가지 해보니 ;;
day는 한글로 나오네요 month는 영어로 나오던데요
원래 그런건가요 ?

by 꾹 [2007.03.27 17:05:39]
음... 년도랑 달까지만 그렇게 나오네염 ~

by 박정민 [2008.09.25 17:46:48]
select to_char(1,'0000') from dual;
을 하게되면 0001이 출력되는데.. 이것을
select '['||to_char(1,'0000')||']' from dual;
을 하게되면 [ 0001] 이 됩니다.
공백이 1칸 붙게 되는데..
꼭 붙을수밖에 없는것같긴한데..
select trim(to_char(1,'0000')) from dual;
하시면 빈공간이없는상태로 나오게되네요..

by 빈이 [2009.12.29 15:57:23]
박정민님
select to_char(1,'0000') from dual; 이렇게 하셔도 앞에 공백이 붙어서
나옵니다 그 앞에 공백이 붙는 이유는 +,- 기호 때문인걸로 알고있구요
공백이 안붙게 나오게 하시려면 select to_char(1,'fm0000') from dual;
이렇게 하시면되요

by 앙마리오 [2015.10.06 21:48:06]

아. 공백문제 때문에 고생했는데 그렇게 하면 되는 거엿군요.. 

덕분에 해결하고 갑니다..


by 진 [2012.09.25 12:11:18]

잘 보고 갑니다~

by 캔디는맛있어 [2014.12.05 17:33:13]

SELECT TO_CHAR(12345678,'L999,999,999')local  FROM DUAL;

저는 이부분이 결과가 ?12,345,678 로 나오네요...

혹시몰라서 

select * from nls_session_parameters;를 해서 확인해보니..

NLS_CURRENCY가 ?  로 나오는데... 제컴이 잘못된건가요??


by 제로엔나 [2015.02.27 04:45:57]

초짜인지라 개념들이 좀 두리뭉실한 상태였는데;;

정의가 명확하고 기본형을 적어주셔서 함수들에 대해 좀 더 정확히 알게 되었네요. ^^

잘 보고 갑니다~

관련글들도 마찬가지로 잘 보는 중이에요 +ㅅ+)b

댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입