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