PostgreSQL:将文本列视为十六进制数

PostgreSQL:将文本列视为十六进制数,postgresql,Postgresql,我有一个表,它有一个包含十六进制数的TEXT列。 我现在需要将它们表示为实际的整数,但没有找到 这样做的方式(类似于反向的到_hex()) 我知道我可以像这样转换文字十六进制值: SELECT x'DEADBEEF'; 但是,如果要转换的值来自 专栏?将'x'连接到列名显然不起作用,因为 它不再是字符串文字 我发现了一个非常丑陋的函数 将查询字符串拼凑在一起,使函数参数再次成为 然后执行该函数,但方法完全正确 倒行逆施——必须有更好的办法。至少我希望如此,因为 这条消息已经快十年了 当然,我知

我有一个表,它有一个包含十六进制数的
TEXT
列。 我现在需要将它们表示为实际的整数,但没有找到 这样做的方式(类似于反向的
到_hex()

我知道我可以像这样转换文字十六进制值:

SELECT x'DEADBEEF';
但是,如果要转换的值来自 专栏?将
'x'
连接到列名显然不起作用,因为 它不再是字符串文字

我发现了一个非常丑陋的函数 将查询字符串拼凑在一起,使函数参数再次成为 然后执行该函数,但方法完全正确 倒行逆施——必须有更好的办法。至少我希望如此,因为 这条消息已经快十年了

当然,我知道将所讨论的值作为整数存储在 首先,数据库将是一条出路。但这在中国是不可能的
在这种情况下,我一直在尝试去区分那些字符串…

Hm,可能有一种更简单的方法

CREATE FUNCTION from_hex(text) RETURNS integer AS $$
DECLARE
    x bytea;
BEGIN
    x := decode($1, 'hex');
    return (get_byte(x, 0) << 24) | (get_byte(x, 1) << 16) |
           (get_byte(x, 2) << 8) | get_byte(x, 3);
END
$$ LANGUAGE plpgsql;
CREATE FUNCTION from_hex(text)返回整数作为$$
声明
x bytea;
开始
x:=解码($1,'hex');

return(get_byte(x,0)以下函数与邮件列表中的那篇文章中的函数大致相同。事实上,是从一篇较新的文章中获得的。我看不出它们有什么问题。我在迁移小数据集时只使用过一次

如果你能指出任何可能源于它的使用的“反常”的东西,请随意否决

使用
INTEGER
数据类型:

CREATE OR REPLACE FUNCTION hex_to_int(hexval varchar) RETURNS integer AS $$
DECLARE
  result  int;
BEGIN
EXECUTE 'SELECT x''' || hexval || '''::int' INTO result;
  RETURN result;
END;
$$
LANGUAGE 'plpgsql' IMMUTABLE STRICT;
使用
BIGINT
数据类型:

CREATE OR REPLACE FUNCTION hex_to_bigint(hexval varchar) RETURNS bigint AS $$
DECLARE
   result  bigint;
BEGIN
EXECUTE 'SELECT x''' || hexval || '''::bigint' INTO result;
 RETURN result;
END;
$$
LANGUAGE 'plpgsql' IMMUTABLE STRICT;

在获取结果的软件代码中实现这一点会更容易。出于某种原因,这会是一个问题吗?我需要在实际使用十六进制数的数值时进行一些查询;除此之外,十六进制数只是用于显示。“Perverse”可能是一个太强的词;让我有点痒的是嵌入的
EXECUTE
和拼凑在一起的字符串。但至少这个版本更可读,所以我会选择这个版本。感谢您的努力。:o)