다른 명령
오라클 10진수 <=> 16진수 <=> 8진수 <=> 2진수 변환
- 가장 쉬운 방법으로 TO_CHAR, TO_NUMBER함수 사용
16진수 변환
select to_char(100, 'xxxxxxxxxx') from dual;
10진수 변환
select to_number('64','xxxxxxxxxx') from dual;
사용자 함수 이용
- Tom kite 라이브러리 이용
-- 진수 변환을 위한 핵심 함수 SQL> create or replace function to_base(p_dec in number, p_base in number) return varchar2 is l_str varchar2(255) default NULL; l_num number default p_dec; l_hex varchar2(16) default '0123456789ABCDEF'; begin if ( trunc(p_dec) <> p_dec OR p_dec < 0 ) then raise PROGRAM_ERROR; end if; loop l_str := substr(l_hex, mod(l_num, p_base)+1, 1) || l_str; l_num := trunc( l_num/p_base); exit when (l_num = 0); end loop; return l_str; end to_base; /
TO_DEC( ) 10진수 변환
-- 10진수로 변환 SQL> create or replace function to_dec(p_str in varchar2, p_from_base in number default 16) return number is l_num number default 0; l_hex varchar2(16) default '0123456789ABCDEF'; begin for i in 1 .. length(p_str) loop l_num := l_num*p_from_base + instr(l_hex, upper(substr(p_str,i,1))) -1; end loop; return l_num; end to_dec; /
TO_HEX( ) 16진수 변환
-- 16진수로 변환 SQL> create or replace function to_hex(p_dec in number) return varchar2 is begin return to_base(p_dec, 16); end to_hex; /
TO_BIN( ) 2진수 변환
--2진수로 변환 SQL> create or replace function to_bin(p_dec in number) return varchar2 is begin return to_base(p_dec,2); end to_bin; /
TO_OCT( ) 8진수 변환
-- 8진수로 변환 SQL> create or replace function to_oct(p_dec in number) return varchar2 is begin return to_base(p_dec, 8); end to_oct; /
사용 예시
- TO_HEX, TO_DEC 함수를 이용하면 TO_CHAR, TO_NUMBER함수를 이용한 것과 동일함.
-- 16진수로 변환 select to_hex(100) from dual; -- 10진수로 변환 select to_dec('64') from dual;