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