Presto - 十六进制字符串到 int

Shi*_*hir 4 sql hex presto

我正在尝试使用 presto 将十六进制字符串(以“0x”开头)转换为其整数值。例如0x100256。我的十六进制字符串称为msg_id。我尝试用这个-

from_hex(substr(msg_id,3))
Run Code Online (Sandbox Code Playgroud)

但我遇到了一个问题,因为from_hex期望偶数个十六进制数字(0100而不是100)。我决定尝试使用if语句来解决这个问题,所以我尝试了以下方法:

if(length(msg_id)%2=0, from_hex(substr(msg_id,3))) 
Run Code Online (Sandbox Code Playgroud)

(稍后会处理奇数位的情况)

但是 - 的结果from_hex是一种varbinary具有不同字节数的类型。我想将其转换为整数或任何其他数字类型,但我找不到方法。

有任何想法吗?我会很感激...

Pio*_*sen 7

您可以使用from_base(string, radix)将十六进制数字写入的数字解析为bigint. 你只需要先去掉前导'0x'

select from_base(substr('0x100', 3), 16);
 _col0
-------
   256
Run Code Online (Sandbox Code Playgroud)

或与regexp_replace()

presto:tiny> select from_base(regexp_replace('0x100', '^0x'), 16);
 _col0
-------
   256
Run Code Online (Sandbox Code Playgroud)