행위

"오라클 10진수 16진수 변환"의 두 판 사이의 차이

DB CAFE

(TO_OCT( ) 10진수 변환)
 
108번째 줄: 108번째 줄:
 
select to_dec('64') from dual;
 
select to_dec('64') from dual;
 
</source>
 
</source>
 +
 +
[[category:oracle]]

2024년 6월 23일 (일) 12:57 기준 최신판

thumb_up 추천메뉴 바로가기


1 오라클 10진수 <=> 16진수 <=> 8진수 <=> 2진수 변환[편집]

  • 가장 쉬운 방법으로 TO_CHAR, TO_NUMBER함수 사용

1.1 16진수 변환[편집]

select to_char(100, 'xxxxxxxxxx') from dual;

1.2 10진수 변환[편집]

select to_number('64','xxxxxxxxxx') from dual;


1.3 사용자 함수 이용[편집]

  • 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;
    /

1.4 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;
  /

1.5 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;
    /

1.6 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;
  /

1.7 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;
    /

1.8 사용 예시[편집]

  • TO_HEX, TO_DEC 함수를 이용하면 TO_CHAR, TO_NUMBER함수를 이용한 것과 동일함.
-- 16진수로 변환 
select to_hex(100) from dual;
-- 10진수로 변환 
select to_dec('64') from dual;