007. 변환 함수(TO_CHAR / TO_NUMBER 등)

IRISH·2024년 3월 4일
0

Oracle

목록 보기
9/17
post-thumbnail
  • 학습일자 : 2024.02.28

TO_CHAR

  • TO_CHAR 함수는 DATE형, NUMBER형을 문자 타입으로 변환하는 함수이다.
  • TO_CHAR(number), TO_CHAR(number, format), TO_CHAR(date, format) 형식으로 사용할 수 있다.
    • format에 들어가는 자릿수보다 number 또는 date의 자릿수가 더 클 경우?
      • ‘#’으로 구성된 결과가 반환된다.
      • 따라서, number 또는 date의 자릿수보다 format에 들어갈 자릿수가 크거나 같아야 한다.

⇒ 기본 예제

-- 콤마 예제
SELECT TO_CHAR(123456789,'999,999,999') comma FROM DUAL; -- 결과 : 123,456,789
 
-- 소숫점 예제  
SELECT TO_CHAR(123.4567895,'999,999,999.99') period FROM DUAL; -- 결과 : 123.46
 
-- $ 표시 예제
SELECT TO_CHAR(12345678,'$999,999,999') dollar  FROM DUAL; -- 결과 : $12,345,678
 
-- Local 화폐 표시 예제 (한국의 경우 ₩로 자동 변환 됨)
SELECT TO_CHAR(12345678,'L999,999,999') local  FROM DUAL; -- 결과 : ₩12,345,678
 
-- 왼쪽에 0을 삽입
SELECT TO_CHAR(123,'09999') zero FROM DUAL; -- 결과 : 00123
 
-- 10진수 -> 16진수로 변환
SELECT TO_CHAR(123,'XXXX') hexadecimal  FROM DUAL; -- 결과 : 7B

⇒ 날짜 함수 변형 예제

-- 년,월,일,시,분,초 예제
SELECT TO_CHAR(SYSDATE, 'YYYY-MM-DD HH24:MI:SS') "sysdate"
FROM DUAL; -- 결과 : 2024-02-28 22:54:20
 
-- 365일 또는 366일 중 몇 일째인지 조회
SELECT TO_CHAR(SYSDATE, 'DDD') "Day of year" FROM DUAL; -- 결과 : 059
 
-- 53주 중 몇 주차 인지 조회
SELECT TO_CHAR(SYSDATE, 'IW') "Week of year" FROM DUAL; -- 결과 : 09
 
-- 해당 월의 이름 조회
SELECT TO_CHAR(SYSDATE, 'MONTH') "Name of month" FROM DUAL; -- 결과 : 2월 

  • "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; -- 결과 : 11/01/01
SELECT TO_DATE('2011-01-01','YYYY-MM-DD') FROM DUAL; -- 결과 : 11/01/01

TO_NUMBER

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

-- 16진수 -> 10진수로 변환
SELECT TO_NUMBER('F89C','XXXX') hexadecimal  FROM DUAL; -- 결과 : 63644

참고

느낀점

TO_CHAR / TO_DATE / TO_NUMBER 모두 실무에서 많이 사용하고 있다.

실제 DB 컬럼의 TYPE과 들어오는 데이터의 형태는 비슷하지만, 들어오는 데이터 타입이 실제 DB 컬럼의 타입과 다른 경우가 빈번히 있다.

이럴 경우, 형 변환 함수를 써야 하고, 이것이 오늘 다뤄봤던 변환 함수에 들어와 있다.

실무에서 나름 꽤나 사용하고 있어서, 이 정도면 충분하다고 생각했는데 오늘 학습을 해보니 많이 부족하다는 것을 느꼈다.

특히, 표 1과 표 2에서 나온 FORMAT들을 아직 많이 사용하지 못해봤다는 생각이 컸다.

앞으로 경력을 쌓으면서 데이터를 다루게 될 가능성이 매우 크다는 것을 안다. 이에 따라 형 변환도 많이 할 수밖에 없는데, 이 챕터를 보면서 나아가면 문제 없을 것 같다.

profile
#Software Engineer #IRISH

0개의 댓글

관련 채용 정보