postgresql – 将文本表示中的十六进制转换为十进制数
发布时间:2020-12-13 16:42:52 所属栏目:百科 来源:网络整理
导读:我正在尝试使用PostgreSQL 9.1将十六进制转换为十进制 用这个查询: SELECT to_number('DEADBEEF','FMXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'); 我得到以下错误: ERROR: invalid input syntax for type numeric: " " 我究竟做错了什么? 你有两个直
我正在尝试使用PostgreSQL 9.1将十六进制转换为十进制
用这个查询: SELECT to_number('DEADBEEF','FMXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'); 我得到以下错误: ERROR: invalid input syntax for type numeric: " " 我究竟做错了什么?
你有两个直接的问题:
> (2)我没有权威的理由,只是经验证据: => SELECT to_number('123','X999'); to_number ----------- 23 (1 row) => SELECT to_number('123','XX999'); to_number ----------- 3 文中提到双引号模式应该如何表现:
但不是格式化字符的非引号字符的行为似乎是未指定的。 在任何情况下,to_number不是将十六进制转换为数字的正确工具,你想这样说: select x'deadbeef'::int; 所以也许this function会为你更好的工作: 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; 然后: => select hex_to_int('DEADBEEF'); hex_to_int ------------ -559038737 ** (1 row) **为避免出现整数溢出错误的负数,请使用bigint而不是int来容纳较大的十六进制数(如IP地址)。 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |