HEX2DEC存储过程实现

数据库当前有十进制转换为十六进制的函数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前缀,也可以不包含。

猜你喜欢

转载自blog.csdn.net/liaosnet/article/details/107034387