我想将 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?
一个简单的方法是:
select ('x'||lpad(the_hex_value,16,'0'))::bit(64)::bigint;
左侧填充 0 是必要的,因为最左边的位总是被解释为符号位。
还要记住bigint
是有符号的,postgres 没有内置的无符号类型。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)