BigQuery中拆分带横杠字符串字段并转换为整数的实现咨询
BigQuery 从ANSWER字段提取横杠前整数的实现方案
方案1:SPLIT函数拆分实现
- 操作逻辑:以
-为分隔符拆分字段值为数组,取数组首元素,去除首尾空格后转换为整数类型 - 可直接运行的代码:
SELECT CAST(TRIM(SPLIT(ANSWER, '-')[OFFSET(0)]) AS INT64) AS extracted_num FROM 你的业务表
- 覆盖你提供的三类示例值的表现:
- 字段值为
9的行:无横杠分隔符,SPLIT返回单元素数组,直接取到完整值9 - 字段值为
10 - Certainly Satisfied.的行:拆分后首元素为带尾部空格的10,经TRIM处理后得到纯数字10 - 字段值为
7 -的行:拆分后首元素为带尾部空格的7,经TRIM处理后得到纯数字7
- 字段值为
方案2:REGEXP_EXTRACT匹配实现(容错性更强)
- 操作逻辑:直接从字符串开头匹配连续数字,不依赖横杠的位置,对格式不规整的脏数据兼容性更好
- 可直接运行的代码:
SELECT CAST(REGEXP_EXTRACT(ANSWER, r'^(\d+)') AS INT64) AS extracted_num FROM 你的业务表
- 适配说明:正则规则
^(\d+)会从字符串起始位置捕获连续1位及以上的数字,无论横杠是否存在、横杠后是否有评价文字、横杠后是否为空,都能准确提取目标数字部分。
生产环境优化
- 将普通
CAST替换为SAFE_CAST,遇到字段无有效数字的异常行时会返回null,不会触发整个查询报错,代码写法:
SELECT SAFE_CAST(REGEXP_EXTRACT(ANSWER, r'^(\d+)') AS INT64) AS extracted_num FROM 你的业务表
- 上述写法无需提前清洗字段内的多余空格、空后缀,可直接覆盖所有已知示例场景。
内容的提问来源于stack exchange,提问作者Burak Çakan
相关产品推荐
相关产品推荐

