我想将HTML使用的十六进制字符串转换为bigint
,然后通过用PL / pgSQL编写的函数将其转换为Postgres中单独的R,G和B值。
我可以将字符串解码为bytea
,如下所示:
hex bytea := decode(hex, 'hex');
在具有固定值的查询中,这就像一个美女:
select ( array[ (cast(x'ffaa33' as bigint) >> 16) % 256,
(cast(x'ffaa33' as bigint) >> 8) % 256,
cast(x'ffaa33' as bigint) % 256 ] )
但我不能将两者放在一起,传递 - 例如'ffaa33'作为参数。
有人有更好的主意吗?我正在使用PosgreSQL 9.1?
答案 0 :(得分:14)
一个简单的方法是:
select ('x'||lpad(the_hex_value,16,'0'))::bit(64)::bigint;
左边填充为0是必要的,因为最左边的位总是被解释为符号位。
另请注意,bigint
已签名,postgres没有内置的无符号类型。