본문 바로가기
Dev. Handbook/SQL, Oracle, MariaDB

[Oracle] 내장 함수 : 형 변환 함수

by breezyday 2022. 5. 13.

Oracle에서 사용할 수 있는 형 변환 함수들은 다음과 같습니다.

1. 형 변환 함수

함수명 양식 기능 설명
TO_CHAR TO_CHAR(num or date, format) 숫자(num) or 날짜(date)를 형식에 맞는 문자열로 변환
TO_NUMBER TO_NUMBER(str, format) 형식(format)의 문자열(str)을 숫자로 변환
TO_DATE
TO_TIMESTAMP
TO_DATE(str, format)
TO_TIMESTAMP(str, format)
형식(format)의 문자열(str)을 날짜로 변환
형식(format)의 문자열(str)을 TIMESTAMP로 변환
BIN_TO_NUM BIN_TO_NUM(2진수) 콤마로 구분된 2진수를 10진수로 변환
NUMTODSINTERVAL NUMTODSINTERVAL(num, format) 숫자(num)를 형식(format)에 맞는 숫자로 반환
format : DAY, HOUR, MINUTE, SECOND
NUMTOYMINTERVAL NUMTOYMINTERVAL(num, format) 숫자(num)를 형식(format)에 맞는 숫자로 반환
format : MONTH, YEAR

1.1 TO_CHAR(num or date, format)

숫자(num) or 날짜(date)를 형식에 맞는 문자열로 변환

 

날짜 변환 형식 ( SYSDATE : 2022-05-13 22:45 )

형식 설명 사용 예
AM, A.M. 오전 TO_CHAR(SYSDATE, ‘AM’) → 오전
PM, P.M. 오후 TO_CHAR(SYSDATE, ‘PM’) → 오후
YYYY, YYY, YY, Y 년도 TO_CHAR(SYSDATE, ‘YYYY’) → 2022
TO_CHAR(SYSDATE, ‘YY’) → 22
MONTH, MON TO_CHAR(SYSDATE, ‘MONTH’) → 5월
MM 01~12 형식의 월 TO_CHAR(SYSDATE, ‘MM’) → 05
D 요일을 1~7로 표시
(1: 일요일 ~ 7:토요일)
TO_CHAR(SYSDATE, ‘D’) → 6
(6: 금요일)
DAY 요일 TO_CHAR(SYSDATE, ‘DAY’) → 금요일
DD 일을 01~31로 표시 TO_CHAR(SYSDATE, ‘DD’) → 13
DDD 1년 중 몇 일인지 001~365로 표시 TO_CHAR(SYSDATE, ‘DDD’) → 133
DL 현재 날짜를 요일까지 표시 TO_CHAR(SYSDATE, ‘DL’) → 2022년 5월13일 금요일
HH, H12 시를 12시간 형식으로 표시 TO_CHAR(SYSDATE, ‘HH’) → 10
H24 시를 24시간 형식으로 표시 TO_CHAR(SYSDATE, ‘HH24’) → 22
MI TO_CHAR(SYSDATE, ‘MI’) → 46
SS TO_CHAR(SYSDATE, ‘SS’) → 33
WW 1년 중 몇 번째 주인지 표시 TO_CHAR(SYSDATE, ‘WW’) → 19

 

-- 날짜 형식 변환
-- SYSDATE : 2022-04-28

SELECT TO_CHAR(SYSDATE, 'AM'), TO_CHAR(SYSDATE, 'PM') FROM DUAL;
       ----------------------  ----------------------
       [오후]                  [오후]

SELECT TO_CHAR(SYSDATE, 'YYYY-MM-DD HH:MI:SS') FROM DUAL;
       ---------------------------------------
       2022-05-13 22:44:01

-- 1:일요일 ~ 7:토요일, 5: 목요일
SELECT TO_CHAR(SYSDATE, 'D') FROM DUAL;
       ---------------------
       5

SELECT TO_CHAR(SYSDATE, 'DL') FROM DUAL;
       ---------------------
       [2022년 5월 13일 금요일]

SELECT TO_CHAR(SYSDATE, 'DAY') FROM DUAL;
       ---------------------
       [금요일]

-- 17번째 주
SELECT TO_CHAR(SYSDATE, 'WW') FROM DUAL;
       ---------------------
       17

 

숫자 변환 형식

형식 설명 사용 예
, (콤마) 쉼표 표시 TO_CHAR(123456, ‘999,999’) → 123,456
. (소수점) 소수점 표시 TO_CHAR(123456.4, ‘999,999.9’) → 123,456.4
9
0
한 자리 숫자
한 자리 숫자, 0으로 채워 반환
TO_CHAR(12345, ‘999,999’) → 12,345
TO_CHAR(12345, '000,999')  012,345
PR 음수일 때 < >로 표시 TO_CHAR(-123, ‘999PR’) → <123>
RN, rn 로마 숫자로 표시 TO_CHAR(123, ‘RN’) → CXXIII
S 양수이면 +, 음수이면 - 표시 TO_CHAR(123, ‘S999’) → +123
$ $ 화폐 표시 TO_CHAR(12345, '$999,999') → $12,345
L Local 화폐 단위 표시 TO_CHAR(12345, 'L999,999')  ₩12,345

 

-- 숫자 형식 변환
SELECT TO_CHAR(123456.789, '999,999.9') FROM DUAL;
       --------------------------------
       [123,456.8]

SELECT TO_CHAR(12345, '000,999'), TO_CHAR(12345, '999,999') FROM DUAL;
       -------------------------  -------------------------
       [012,345]                  [12,345]
       
SELECT TO_CHAR(12345, '$999,999'), TO_CHAR(12345, 'L999,999') FROM DUAL;
       --------------------------  --------------------------
       [$12,345]                   [₩12,345]

SELECT TO_CHAR(10, 'X'), TO_CHAR(16, 'XX'), TO_CHAR(16, 'X') FROM DUAL;
       ----------------  -----------------  ----------------
       [A]               [10]               [##]

 

1.2 TO_NUMBER(str, format)

형식(format)의 문자열(str)을 숫자로 변환

 

SELECT TO_NUMBER('0123'), TO_NUMBER('1234.567') FROM DUAL;
       -----------------  ---------------------
       [123]              [1234.567]

SELECT TO_NUMBER('12,345', '999,999') FROM DUAL;
       ------------------------------
       [12345]
       
SELECT TO_NUMBER('$12,345.11', '$999,999.99') FROM DUAL;
       --------------------------------------
       [12345.11]

SELECT TO_NUMBER('12,345.56', '999,999.999') FROM DUAL;
       -------------------------------------
       [12345.56]

SELECT TO_NUMBER('A', 'X'), TO_NUMBER('10', 'XX') FROM DUAL;
       -------------------  ---------------------
       [10]                 [16]

 

1.3 TO_DATE(str, format), TO_TIMESTAMP(str, format)

TO_DATE(str, format) : 형식(format)의 문자열(str)을 날짜로 변환
TO_TIMESTAMP(str, format) : 형식(format)의 문자열(str)을 TIMESTAMP로 변환

SELECT TO_DATE('2022-05-13', 'YYYY-MM-DD') FROM DUAL;
       -----------------------------------
       [2022-05-13]

SELECT TO_TIMESTAMP('2022-05-13', 'YYYY-MM-DD') FROM DUAL;
       ----------------------------------------
       [22/05/13 00:00:00.000000000]

 

1.4 BIN_TO_NUM(2진수)

콤마로 구분된 2진수를 10진수로 변환

 

SELECT BIN_TO_NUM(1, 0), BIN_TO_NUM(1, 0, 0), BIN_TO_NUM(1,0,1,0) FROM DUAL;
       ----------------  -------------------  -------------------
       [2]               [4]                  [10]

 

1.5 NUMTODSINTERVAL(num, format)

숫자(num)를 형식(format)에 맞는 숫자로 반환
format : DAY, HOUR, MINUTE, SECOND

 

SELECT NUMTODSINTERVAL(48,'HOUR'), NUMTODSINTERVAL(3601,'SECOND') FROM DUAL;
       --------------------------  ------------------------------
       [+2 00:00:00.000000]=2일     [+00 01:00:01000000]=1시간1초
       
SELECT NUMTODSINTERVAL(121, 'MINUTE'), NUMTODSINTERVAL(10,'DAY') FROM DUAL;
       ------------------------------  -------------------------
       [+00 02:01:00.000000]=2시간1분 [+10 00:00:00.000000]=10일

 

1.6 NUMTOYMINTERVAL(num, format)

숫자(num)를 형식(format)에 맞는 숫자로 반환
format : MONTH, YEAR

 

SELECT NUMTOYMINTERVAL(37, 'MONTH'), NUMTOYMINTERVAL(1.5, 'YEAR') FROM DUAL;
       ----------------------------  ----------------------------
       [+03-01]=3년1개월             [+01-06]=1년6개월

 

 

 

참고

https://docs.oracle.com/database/121/SQLRF/functions002.htm#SQLRF20034

 

 

 

 

 

댓글