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)