PostgreSQL 十六进制转为整数函数

PostgreSQL有整数转为字符串的函数to_hex,但却没有提供反过来的函数,因为要用到,写了一个与大家分享。

create or replace function hex_to_int(s character varying)
returns bigint
as
$$
declare
  retval bigint;
  lead character varying;
begin
lead=left(s,1);
if (lead='$') or (lead='h') or (lead='H') then
  lead=right(s,length(s)-1);
else
  begin
  lead=left(s,2);
  if (lead='0x') or (lead='0X') then
    lead=right(s,length(s)-2);
  else
    raise exception '% 不是一个有效的十六进制数',s;
  end if;
  end;
end if;
s='x'||repeat('0',16-length(lead))||lead;
--raise notice 'hexchars=%',s;
retval=cast(cast(s as bit(64)) as bigint);
return retval;
end;
$$ language plpgsql immutable strict;

调用时,只需要简单的将其赋值给一个变量,或者如select hex_to_int(‘0x0220’);这样子调用一下就可以。

    这个函数支持Delphi/C++/Basic的十六进制表示方式。

select hex_to_int('0x0100');
select hex_to_int('$0100');
select hex_to_int('H0100');

 

分享到: