[英]Extract Substring in BigQuery
身体 |
---|
/tpt/TpScaning-ScaningRoad-PERSIVEE-202301020730327429-1567651.tp |
/tpt/TpScaning-BaliResortsInterns-PERSIVEE-202205300341154744-909890.tp |
/tpt/TpScaning-RXX-PERSIVEE-202108210412090110-000989.tp |
/tpt/TpScaning-Backnationnotecom-PERSIVEE-202112201229124214-783672.tp |
/tpt/TpScaning-DBZ-PERSIVEE-202109131129036172-908954.tp |
/tpt/TpScaning-DBZ-PERSIVEE-202109131129036172-17892578.tp |
我在 BigQuery 表 xyz 中有一列“正文”,其中包含在我们的内部应用程序上请求的扫描。 正文字段包含其中的日期部分,即(202301020730327429、202205300341154744 ...)18 位数字。
我想在名为 date 的单独列中提取这个 18 位序列,以了解扫描请求的创建时间。
我尝试使用 substr function 但它无法正常工作,因为 Body 字段的长度在变化。 有没有更好的方法来实现这个?
预计 output:
日期 |
---|
202301020730327429 |
202205300341154744 |
202108210412090110 |
202112201229124214 |
202109131129036172 |
202109131129036172 |
您可以考虑以下。
WITH sample_table AS (
SELECT '/tpt/TpScaning-ScaningRoad-PERSIVEE-202301020730327429-1567651.tp' body UNION ALL
SELECT '/tpt/TpScaning-BaliResortsInterns-PERSIVEE-202205300341154744-909890.tp' body UNION ALL
SELECT '/tpt/TpScaning-RXX-PERSIVEE-202108210412090110-000989.tp' body UNION ALL
SELECT '/tpt/TpScaning-Backnationnotecom-PERSIVEE-202112201229124214-783672.tp' body UNION ALL
SELECT '/tpt/TpScaning-DBZ-PERSIVEE-202109131129036172-908954.tp' body UNION ALL
SELECT '/tpt/TpScaning-DBZ-PERSIVEE-202109131129036172-17892578.tp' body
)
SELECT *, PARSE_TIMESTAMP('%Y%m%d%H%M%E4S', LEFT(date, 14) || '.' || RIGHT(date, 4)) ts
FROM (
SELECT *, REGEXP_EXTRACT(body, r'\d{18}') AS date FROM sample_table
);
\d
匹配 1 个数字(相当于 [0-9]){18}
恰好与前一个标记匹配 18 次%E4S
格式元素用小数精度的数字解析秒,即00.0000 for %E4S
。 请注意,它在字符串数据中需要一个点 (.)。查询结果
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.