数据库当前有十进制转换为十六进制的函数hex()函数,却没有十六进制转换为十进制的函数,只能自己定义一个hex2dec(),存储过程如下:
drop function if exists hex2dec;
create function hex2dec(p_str varchar(18))
returns bigint as hex2dec with (not variant);
define tmpstr varchar(18);
define v_dec bigint;
define i smallint;
let v_dec = 0;
if p_str is null or length(p_str) = 0 then
return 0;
end if;
let tmpstr = reverse(ltrim(ltrim(lower(p_str),"0x"),"0"));
for i = 1 to length(tmpstr)
let v_dec = v_dec + decode(substr(tmpstr,i,1),"a",10,"b",11,"c",12,"d",13,"e",14,"f",15,substr(tmpstr,i,1)::int) * pow(16,i-1);
end for;
return v_dec;
end function;
功能及缺陷:
1,实现0x0至0x7fffffffffffffff之间的十六进制转换为十进制数值,超出则报错。
2,十六进制有效字符位超过14位时,计算中要可能会丢失精度。
3,输入可包含0x前缀,也可以不包含。