我正在尝试使用 presto 将十六进制字符串(以“0x”开头)转换为其整数值。例如0x100
到 256。我的十六进制字符串称为 msg_id。
我尝试使用这个-
from_hex(substr(msg_id,3))
但我遇到了一个问题,因为from_hex
期望偶数个十六进制数字(0100
代替100
)。
我决定尝试使用if
声明,所以我尝试了这个:
if(length(msg_id)%2=0, from_hex(substr(msg_id,3)))
(稍后会处理奇数位的情况)
但是-的结果from_hex
is a varbinary
类型,具有不同的字节数。我想将其转换为整数或任何其他数字类型,但我找不到方法。
有任何想法吗?我会很感激...
您可以使用from_base(string, radix) https://prestosql.io/docs/current/functions/math.html#from_base将用十六进制数字写入的数字解析为bigint
。你只需要去掉前导'0x'
first:
select from_base(substr('0x100', 3), 16);
_col0
-------
256
or with regexp_replace() https://prestosql.io/docs/current/functions/regexp.html#regexp_replace:
presto:tiny> select from_base(regexp_replace('0x100', '^0x'), 16);
_col0
-------
256
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)