Presto - 十六进制字符串到 int
Presto - hex string to int
我正在尝试使用 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
的结果是 varbinary
类型,具有不同的字节数。我想将它转换为整数或任何其他数字类型,但我找不到实现它的方法。
有什么想法吗?我会很感激...
您可以使用from_base(string, radix)
将用十六进制数字编写的数字解析为bigint
。您只需要先去除前导 '0x'
:
select from_base(substr('0x100', 3), 16);
_col0
-------
256
presto:tiny> select from_base(regexp_replace('0x100', '^0x'), 16);
_col0
-------
256
我正在尝试使用 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
的结果是 varbinary
类型,具有不同的字节数。我想将它转换为整数或任何其他数字类型,但我找不到实现它的方法。
有什么想法吗?我会很感激...
您可以使用from_base(string, radix)
将用十六进制数字编写的数字解析为bigint
。您只需要先去除前导 '0x'
:
select from_base(substr('0x100', 3), 16);
_col0
-------
256
presto:tiny> select from_base(regexp_replace('0x100', '^0x'), 16);
_col0
-------
256