postgresql 十六进制到十进制

plupiseo  于 2023-06-22  发布在  PostgreSQL
关注(0)|答案(1)|浏览(247)

我在供应商的PostgreSQL 9.6.4中有一个函数,它返回SETOF "Values"(我在\dT的输出中没有看到这个类型),例如:

select "Data" from getlastvaluesnamed((E'341d0b24-...')::uuid,(E'G1')::text);
  Data
--------
 \x0015

我想以十进制的形式接收这个,所以尝试了十几个这样的请求:

select "Data"::int from getlastvaluesnamed(...);
ERROR:  cannot cast type bytea to integer

select "Data"::text::int from getlastvaluesnamed(...);
ERROR:  invalid input syntax for integer: "\x0015"

select to_number('123', "Data"::text) from getlastvaluesnamed(...);
 to_number
-----------
         3  << -- Wrong, should be 21

select encode("Data"::bytea, 'hex')::int from getlastvaluesnamed(...));
 encode
--------
     15     << -- Wrong, should be 21

等等。
我做错了什么?

llmtgqce

llmtgqce1#

如果bytea值始终为4位数字:

select concat('x', encode('\x0015'::bytea, 'hex'))::bit(16)::int;

否则,对于小于9位的值:

select concat('x', lpad(encode('\x0015'::bytea, 'hex'), 8, '0'))::bit(32)::int;

db<>fiddle.中测试

相关问题