在Postgres中将十六进制字符串转换为bigint

sim*_*one 4 sql postgresql hex postgresql-9.1

我想将HTML使用的十六进制字符串转换为a bigint,然后通过PL/pgSQL编写的函数将其转换为Postgres中单独的R,G和B值.

我可以bytea像这样解码字符串:

hex bytea := decode(hex, 'hex');
Run Code Online (Sandbox Code Playgroud)

在具有固定值的查询中,这就像一个美女:

select ( array[ (cast(x'ffaa33' as bigint) >> 16) % 256,
                (cast(x'ffaa33' as bigint) >> 8) % 256,
                 cast(x'ffaa33' as bigint) % 256 ] )
Run Code Online (Sandbox Code Playgroud)

但我不能将两者放在一起,传递 - 例如'ffaa33'作为参数.

谁有更好的主意?我正在使用PosgreSQL 9.1?

Dan*_*ité 14

一个简单的方法是:

 select ('x'||lpad(the_hex_value,16,'0'))::bit(64)::bigint;
Run Code Online (Sandbox Code Playgroud)

左边的填充为0是必要的,因为最左边的位总是被解释为符号位.另外请记住,bigint签名后,postgres没有内置的无符号类型.

  • @Cherven:postgres有一个内置的to_hex(bigint)函数 (3认同)