PostgreSQL有整数转为字符串的函数to_hex,但却没有提供反过来的函数,因为要用到,写了一个与大家分享。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 | 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的十六进制表示方式。
1 2 3 | select hex_to_int('0x0100'); select hex_to_int('$0100'); select hex_to_int('H0100'); |