代码之家  ›  专栏  ›  技术社区  ›  Shir

preto-十六进制字符串到int

  •  3
  • Shir  · 技术社区  · 7 年前

    我正在尝试使用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))) 
    

    (稍后将处理奇数位数的大小写)

    但是-结果是 来自十六进制 是一个 varbinary 类型,字节数不同。我想把它转换成一个整数,或者其他任何数字类型,但是我找不到一种方法。

    有什么想法吗?我很感激…

    1 回复  |  直到 6 年前
        1
  •  1
  •   Piotr Findeisen    6 年前

    你可以用 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