You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Google BigQuery:依据A列值从B列JSON串提取对应数值生成C列

在Google BigQuery中提取对应字段的数值

方法一:利用JSON函数(推荐,更稳定)

你的Column B是类JSON结构,仅末尾多了个多余逗号,先清理格式再用JSON提取函数即可:

SELECT
  Column_A,
  Column_B,
  CAST(
    JSON_EXTRACT_SCALAR(
      REGEXP_REPLACE(Column_B, r',$', ''), -- 移除末尾多余的逗号,转为标准JSON
      CONCAT('$.', Column_A)
    ) AS FLOAT64
  ) AS Column_C
FROM
  `your_project.your_dataset.your_table`
  • 先用REGEXP_REPLACE修正Column B的格式,使其符合标准JSON要求
  • JSON_EXTRACT_SCALAR通过拼接$.+Column A的值作为JSON路径,提取对应字符串值
  • 最后用CAST转为浮点型,匹配Column C的格式

方法二:基于字符串截取(按你的思路优化)

如果坚持用字符串截取方式,可利用STRPOS的第三个参数指定搜索起始位置,定位目标数值后的逗号位置再截取内容:

SELECT
  Column_A,
  Column_B,
  CAST(
    SUBSTR(
      Column_B,
      -- 计算数值起始位置:Column A的位置 + Column A长度 + 1(跳过冒号)
      STRPOS(Column_B, Column_A) + LENGTH(Column_A) + 1,
      -- 计算截取长度:下一个逗号的位置 - 数值起始位置
      STRPOS(Column_B, ',', STRPOS(Column_B, Column_A) + LENGTH(Column_A) + 1) 
      - (STRPOS(Column_B, Column_A) + LENGTH(Column_A) + 1)
    ) AS FLOAT64
  ) AS Column_C
FROM
  `your_project.your_dataset.your_table`
  • 用LENGTH(Column_A)替代固定的+5,适配不同长度的Column A值
  • STRPOS(Column_B, ',', 起始位置)从指定位置开始搜索下一个逗号,确定数值的结束位置

内容的提问来源于stack exchange,提问作者Emma McDermott

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.03 09:15:34