在Google BigQuery SQL中将指定HEX字符串转换为多个十进制数
在BigQuery中拆分HEX字符串为指定长度的十进制数
针对你的需求,我们可以利用BigQuery的数组操作和类型转换来实现,核心是按小端字节序拼接对应字节后转十进制。以下是简洁的实现代码:
WITH hex AS ( SELECT '0x40,0xb,0x0,0x0,0x2,0x9,0x0,0x0,0x2a,0x0' hex_col ), processed AS ( SELECT -- 拆分字符串为数组,同时去掉每个元素的'0x'前缀,得到纯十六进制字符数组 ARRAY(SELECT REPLACE(TRIM(element), '0x', '') FROM UNNEST(SPLIT(hex_col, ',')) element) AS hex_arr FROM hex ) SELECT -- 处理第一个32bit值:取前4个字节倒序拼接,转十进制 CAST(CONCAT('0x', hex_arr[3], hex_arr[2], hex_arr[1], hex_arr[0]) AS INT64) AS val_32bit_1, -- 处理第二个32bit值:取中间4个字节倒序拼接,转十进制 CAST(CONCAT('0x', hex_arr[7], hex_arr[6], hex_arr[5], hex_arr[4]) AS INT64) AS val_32bit_2, -- 处理16bit值:取最后2个字节倒序拼接,转十进制 CAST(CONCAT('0x', hex_arr[9], hex_arr[8]) AS INT64) AS val_16bit FROM processed
代码说明
- 拆分与清洗:用
SPLIT将逗号分隔的HEX字符串拆成单个元素的数组,再通过REPLACE去掉每个元素的0x前缀,得到纯十六进制字符组成的数组。 - 小端字节序拼接:根据示例的转换逻辑(低字节在前),我们将对应位置的字节倒序拼接:
- 第一个32bit取数组索引0-3的元素,按3→2→1→0的顺序拼接
- 第二个32bit取索引4-7的元素,按7→6→5→4的顺序拼接
- 16bit取索引8-9的元素,按9→8的顺序拼接
- 转十进制:给拼接后的十六进制字符串加上
0x前缀,再用CAST(... AS INT64)直接转换为十进制数。
执行这段SQL后,会得到和示例完全一致的结果:2880、2306、42。
内容的提问来源于stack exchange,提问作者Eithan
相关产品推荐
相关产品推荐

