6

我想将 HTML 使用的十六进制字符串转换为 a 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?

4

1 回答 1

23

一个简单的方法是:

 select ('x'||lpad(the_hex_value,16,'0'))::bit(64)::bigint;

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

于 2012-09-11T19:48:06.583 回答