【发布时间】:2017-10-05 15:42:04
【问题描述】:
我在 google bigquery 中有一个这样的字符串框架:
S,0,2B3,8, C2 B3 00 00 00 00 03 DE
S,0,3FA,6, 00 E0 04 A5 00 0B
S,0,440,8, 80 40 4E A5 00 47 00 64
S,0,450,8, 89 50 01 12 01 19 01 B3
S,0,4B0,8, 80 B0 4E A5 00 43 00 64
我的目标是提取最后的 8 个字节(例如 80 40 4E A5 00 47 00 64 )。可能只有以 83 和 84 开头的那些。 我没有让它与拆分、修剪、包含或 regexp_extract 一起工作。 如果有人可以帮助我,我会很高兴。 问候
/编辑 非常感谢你们的解决方案!这帮助很大。
#standardSQL
SELECT
*
FROM (
SELECT
timestamp,
REGEXP_EXTRACT(CAN_Frame, r', ([^,]+)$') AS bytes_string,
FROM_HEX(REPLACE(REGEXP_EXTRACT(CAN_Frame, r', ([^,]+)$'), ' ', '')) AS bytes
FROM `data.source`
)
WHERE SUBSTR(bytes, 1, 1) IN (b'\x83', b'\x84')
ORDER BY timestamp DESC
LIMIT 8000
给我
行时间戳字节_字符串字节
1 2017-09-29 14:31:02 UTC 84 10 00 25 00 21 00 4F hBAAJQAhAE8=
2 2017-09-29 14:30:42 UTC 83 80 00 01 00 03 00 0D g4AAAQADAA0=
3 2017-09-29 14:30:40 UTC 84 B2 00 27 00 08 00 03 hLIAJwAIAAM=
#standardSQL
SELECT
timestamp,
TRIM(SPLIT(CAN_Frame)[OFFSET(4)]) AS bytes
FROM
`data.source`
WHERE
LENGTH(CAN_Frame) > 1 and
SUBSTR(TRIM(SPLIT(CAN_Frame)[OFFSET(4)]),1,2) IN ('83', '84')
ORDER BY
timestamp DESC
LIMIT
8000
给我
行时间戳字节
1 2017-09-29 14:31:02 UTC 84 10 00 25 00 21 00 4F
2 2017-09-29 14:30:42 UTC 83 80 00 01 00 03 00 0D
3 2017-09-29 14:30:40 UTC 84 B2 00 27 00 08 00 03
是否有可能从以 83 开头的 bytes_string 中仅获取第六和第七个字节,从以 84 开头的 bytes_string 中获取第 4 和第 5 个字节,并从字符串 83 中获取第 8 个字节和从字符串 84 中获取第 3 个字节进一步计算?
最好的问候
【问题讨论】:
-
感谢您的建议,并为我的错误感到抱歉。我会牢记(并提出很多新问题)
-
没问题。继续问是否还需要它:o)
标签: regex string split google-bigquery