Almost-Native

오라클 16진수/10진수 변환 (hexa / decimal convert) 본문

Java 프로그램 개발, IT

오라클 16진수/10진수 변환 (hexa / decimal convert)

2020. 12. 11. 14:03

Oracle Database 에서 16진수 <-> 10진수 간 변환을 하고자 하는 경우에는 to_number() 함수와 to_char() 함수를 사용합니다.

 

-- 16진수 -> 10진수로 변환
SQL> select to_number('f89c', 'xxxx') from dual;

TO_NUMBER('F89C','XXXX')
------------------------
           63644


-- 10진수 -> 16진수로 변환
SQL> select to_char(63664, 'xxxx') from dual;

TO_CH
-----
 f8b0

원래 to_number() 는 문자를 숫자로 바꾸는 함수이고, to_char() 는 숫자를 문자로 바꾸는 함수인데,

2번째 아규먼트(인자)로 포맷을 지정함으로써 진수변환에 사용할 수 있습니다.

 

포맷은 'x' 를 지정하는데, 숫자 자릿수만큼 'x'를 반복하면 됩니다.

 

 

to_number() 함수에서 'x' 포맷문자 갯수를 필요한 자릿수보다 적게 지정하면 ORA-1722 에러가 발생합니다.

많이 지정하는 것은 상관없습니다.

 

SQL> select to_number('f89c', 'xx') from dual;
select to_number('f89c', 'xx') from dual
                 *
ERROR at line 1:
ORA-01722: invalid number

 

to_char() 함수에서 'x' 포맷문자 갯수를 필요한 자릿수보다 적게 지정하면 '#' 으로 표시됩니다.

많이 지정하는 경우에는 앞에 공백이 추가됩니다.

 

SQL> select to_char(63664, 'xx') from dual;

TO_
---
###

SQL> select to_char(63664, 'xxxxxxxxxx') from dual;

TO_CHAR(636
-----------
       f8b0

 

Comments