【问题标题】:Presto - hex string to intPresto - 十六进制字符串到 int
【发布时间】:2018-05-23 14:15:40
【问题描述】:

我正在尝试使用 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 类型,具有不同数量的字节。我想将它转换为整数或任何其他数字类型,但我找不到办法。

有什么想法吗?我会很感激的...

【问题讨论】:

    标签: sql hex presto


    【解决方案1】:

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

    select from_base(substr('0x100', 3), 16);
     _col0
    -------
       256
    

    regexp_replace():

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-04-27
      • 2013-02-01
      • 1970-01-01
      • 2010-10-04
      • 2019-11-16
      • 2014-03-07
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多