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

本文介绍Oracle数据库中十进制与十六进制互相转换的方法。包括使用内置函数进行快速转换及自定义函数实现更复杂的转换需求。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 一)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;


 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值