본문 바로가기
DB/Oracle

[Oracle] 문자열 형변환 / TO_CHAR 함수 (날짜 포맷, 소수점, 천단위 콤마)

by 키튼햄 2023. 10. 12.

TO_CHAR() 함수는 날짜, 숫자 등 값을 문자열로 변환하는 함수이다.

 

 

1. 날짜 포맷을 문자열로 변경

SELECT TO_CHAR(SYSDATE, 'YYYYMMDD')              --20231012
     , TO_CHAR(SYSDATE, 'YYYY/MM/DD')            --2023/10/12
     , TO_CHAR(SYSDATE, 'YYYY-MM-DD')            --2023-10-12
     , TO_CHAR(SYSDATE, 'YYYY-MM-DD HH24:MI:SS') --2023-10-12 19:10:45
  FROM dual

YYYY: 년, MM: 월, DD: 일, HH24: 24시간, HH: 12시간, MI: 분, SS:초

 

 

1-1. 오라클 요일,  포맷

SELECT TO_CHAR(SYSDATE, 'D')    -- 4 (1(일) ~ 7(토))
     , TO_CHAR(SYSDATE, 'DY')   --수 
     , TO_CHAR(SYSDATE, 'DAY')  --수요일
     , TO_CHAR(SYSDATE, 'MON')  -- 7월
     , TO_CHAR(SYSDATE, 'DL')   -- 2023년 10월 12일 목요일
FROM DUAL

 

1-2. 오전, 오후 포맷

언어설정에 따라 오전, 오후 또는 AM, PM으로 반환된다.

SELECT TO_CHAR(SYSDATE, 'AM')                    --오전
     , TO_CHAR(SYSDATE, 'AM HH:MI:SS')           --오전 11:44:31
     , TO_CHAR(SYSDATE, 'YYYY-MM-DD AMHH:MI:SS') --2020-07-23 오전11:44:31
     , TO_CHAR(SYSDATE, 'PM HH:MI:SS')           --오후 11:44:31

  FROM dual

 

1-3. 일차, 주차, 분기 포맷

SELECT TO_CHAR(SYSDATE, 'DDD')  --187 (1년 기준 187일차)
     , TO_CHAR(SYSDATE, 'WW')   --27 (1년 기준 27주차)
     , TO_CHAR(SYSDATE, 'Q')    --3 (3분기)
     , TO_CHAR(SYSDATE, 'W')    --1 (한달 기준 1주차)
FROM DUAL

 

1-4. 날짜의 앞에 표시되는 0 없애는 포맷

SELECT TO_CHAR(SYSDATE, 'MM-DD')    --07-06 
     , TO_CHAR(SYSDATE, 'FMMM-DD')  --7-6 
FROM DUAL

 

1-4. 세기 포맷

SELECT TO_CHAR(SYSDATE, 'CC')  --21 (세기)
     , TO_CHAR(SYSDATE, 'BC')  --서기 
FROM DUAL

 

 

 

 

2. 소수점을 문자열로 변경

SELECT TO_CHAR(123.456, 'FM990.999') --123.456
     , TO_CHAR(1234.56, 'FM9990.99') --1234.56
     , TO_CHAR(0.12345, 'FM9990.99') --0.12
  FROM dual

FM9990.99의 의미

FM: 문자열의 공백제거 (좌우 9로 치환된 소수점 이상의 공백 및 소수점 이하의 0을 제거 한다.)

9는 해당 자리의 숫자를 의미하고 값이 없을 경우 소수점 이상은 공백으로 소수점 이하는 0으로 표시한다.

0은 해당 자리의 숫자를 의미하고 값이 없을 경우 0으로 표시하며 숫자의 길이를 고정적으로 표시 할 때 주로 사용한다.

 

(추가설명)

2-1. FM을 넣지 않을 경우 숫자 소수점 이상은 공백으로, 소수점 이하는 0으로 표시된다.

SELECT TO_CHAR(0.40, '99.999')  --00.400
FROM DUAL

 

2-2. 9는 가변적인 값이어서 0이거나 숫자가 존재하지 않을 시에는 값을 버린다.

SELECT TO_CHAR(0.40, 'FM99.99')  --0.4
FROM DUAL

 

2-3. 0은 해당 값의 길이가 고정적으로 변환이 된다.

       변환된 숫자의 길이를 일정하게 맞추고 싶다면 길이만큼 0으로 채우면 된다.

SELECT TO_CHAR(0.40, 'FM90.000')  --0.400
FROM DUAL

 

2-4. 단, 변환될 숫자의 길이보다 포맷의 길이가 작으면 오류가 발생한다.

       포맷을 지정할시 변환될 숫자의 길이보다 더 많이 9 또는 0을 채워야 한다.

SELECT TO_CHAR(1234.40, 'FM990.000')  --#######
FROM DUAL

 

 

 

3. 숫자의 천단위 콤마 찍기

SELECT TO_CHAR(123467, 'FM999,999')        --123,467
     , TO_CHAR(123467890, 'FM999,999,999') --123,467,890
     , TO_CHAR(123467, 'FML999,999')       --₩123,467
  FROM dual

 

 

 

 


참고 블로그