在Postgres中将十六进制字符串转换为大整数

6
我可以帮您将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'作为参数传递。

有人有更好的想法吗?我正在使用 PostgreSQL 9.1?

1个回答

24

一个简单的方法是:

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

左侧填充0是必要的,因为最左边的位始终会被解释为符号位。 还要记住bigint是有符号的,Postgres没有内置无符号类型。


感谢Daniel。如何将bigint转换为十六进制? - Cherven
3
@Cherven:Postgres内置了 to_hex(bigint) 函数。 - Daniel Vérité

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接