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