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

标签 sql postgresql hex postgresql-9.1

<分区>

我想将 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?

最佳答案

一个简单的方法是:

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

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

关于sql - 在 Postgres 中将十六进制字符串转换为 bigint,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12375369/

相关文章:

mysql - 检索为 Mysql 中的树数据定义的最后一个值

sql - 派斯帕克/SQL : add a flag column like left semi join

sql - 回车 Oracle 10g SQL

python - 如何通过迭代现有的 OSM 数据表在 PostgreSQL 中生成新表

c# - IFormattable.ToString 无法按预期进行十六进制格式化

html 颜色与图像颜色

php - 使用表单选择日期范围内的数据

php - 使用 PostgreSQL 计数查询优化 PHP 脚本

ruby-on-rails - 安装 pg (1.2.1) 时出错,Bundler 无法继续

Python 十六进制