Presto - 十六进制字符串到int

时间:2018-05-23 14:15:41

标签: sql hex presto

我正在尝试使用presto将十六进制字符串(以'0x'开头)转换为它的整数值。例如User User action Date and time of action Lisa Edited 2018-05-20 09:46 AM GMT+2 Tom Edited 2018-05-18 11:18 AM GMT+2 Tom Edited 2018-05-18 10:12 AM GMT+2 Lisa Edited 2018-05-16 13.28 PM GMT+2 Lisa Posted 2018-05-16 13.25 PM GMT+2 到256.我的十六进制字符串称为msg_id。 我试着用这个 -

0x100

但我遇到了一个问题,因为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类型,具有不同的字节数。我想将它转换为整数或任何其他数字类型,但我找不到办法。

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

1 个答案:

答案 0 :(得分:1)

您可以使用import logging import logzero from logzero import logger from sense_hat import SenseHat import os import ephem dir_path = os.path.dirname(os.path.realpath(__file__)) sh = SenseHat() logzero.logfile(dir_path+"/iss.csv") name = "ISS (ZARYA)" line1 = "1 25544U 98067A 18032.92935684 .00002966 00000-0 52197-4 0 99911 25544U 98067A 18032.92935684 .00002966 00000-0 52197-4 0 9991" line2 = "2 25544 51.6438 332.9972 0003094 62.2964 46.0975 15.54039537 97480" iss = ephem.readtle(name, line1, line2) iss.compute() formatter = logging.Formatter('%(name)s - %(asctime)-15s - %(levelname)s: %(message)s'); logzero.formatter(formatter) sublat = iss.sublat sublong = iss.sublong logger.info("%s,%s", sublong, sublat, ) 将用十六进制数字书写的数字解析为from_base(string, radix)。您只需要先去除前导bigint

'0x'

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