十进制和十六进制之间的转换函数总结

来源:互联网 发布:投影拼接融合软件 编辑:程序博客网 时间:2024/06/06 08:52

 一)oracle 自带的十进制和十六进制之间的转换函数
1、十进制到十六进制:
SQL> select   to_char(933947329,'XXXXXXXXXXXX')   from   dual;

TO_CHAR(933947329,'XXXXXXXXXXX')
------------------------------
     37AAE7C1

2、十六进制到十进制:
SQL> select   to_number('37AAE7C1','XXXXXXXXXXXX')   from   dual;

TO_NUMBER('37AAE7C1','XXXXXXXX')
------------------------------
                     933947329


二)下面是构造的函数,非oracle自带函数
 --十进制转十六进制
 create   or   replace   function   DecToHex(iDecimal   IN   VARCHAR2)
  return   varchar2   is
      nDecimal   INTEGER;
      Quotient   INTEGER;
      Residue   INTEGER;
      Result   varchar2(50);
  BEGIN
      nDecimal   :=   to_number(iDecimal);
  LOOP
      Quotient   :=   FLOOR(nDecimal/16);
      Residue   :=   nDecimal   MOD   16;
      SELECT   Decode(Residue,10,'A',11,'B',12,'C',13,'D',14,'E',15,'F',TO_CHAR(Residue))   ||   Result
              INTO   Result   FROM   DUAL;
      EXIT   WHEN   Quotient   =   0;
      nDecimal   :=   Quotient;
  END   LOOP;
            return(Result);
  end   DecToHex;
  /

  --十六进制转十进制
  create   or   replace   function   HexToDec(icHex   in   varchar2)
  return   varchar2   is
      iDecimal   INTEGER;
      cNewHex   VARCHAR2(1);
      iHexlen   INTEGER;
      Result   INTEGER;
  BEGIN
      Result   :=0;
      iHexlen   :=   length(icHex);
      FOR   i   IN   1..iHexlen   LOOP
            cNewHex   :=substr(icHex,iHexlen   -   i   +   1,1);
            SELECT   decode(cNewHex,'A',10,'B',11,'C',12,'D',13,'E',14,'F',15,TO_NUMBER(cNewHex))
                        INTO   iDecimal   FROM   DUAL;
            Result   :=   Result   +   iDecimal   *   power(16,(i-1));
      END   LOOP;
      return(to_char(Result));
  end   HexToDec;


 

原创粉丝点击