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

如何在BigQuery中移除指定列的前缀0 是否可使用substr函数实现

BigQuery移除指定列前导零的实现方法

首先明确:完全可以用substr函数实现需求,同时还有更简洁的写法可以选,两种方案都能满足你要的「不管前面有多少个连续前导零,全部清除,012345/0012345/00012345最终都输出12345」的要求,可直接替换到你之前的UPDATE逻辑里用。

方案1:类型转换法(最简便,推荐日常用)

利用整数类型不保留前导零的特性,直接做两层类型转换就行,比手动截字符串更不容易写错,和你之前写的加前缀逻辑的类型转换思路是一致的。
可直接运行的UPDATE代码:

UPDATE
  table.name
SET
  id = CAST(CAST(id AS STRING) AS INT64)
WHERE
  code = 'US'
  -- 可选过滤:只处理开头带0的行,减少不必要的计算
  AND STARTS_WITH(CAST(id AS STRING), '0')

注意:如果你的id存在全0值(比如0000),这个转换会返回0,符合常规业务预期。

方案2:substr实现方案

就是你问到的substr实现方式,核心逻辑是先找到字符串里第一个非0字符的位置,再用substr从这个位置开始截取到末尾,就能把所有前导零去掉。需要搭配正则函数REGEXP_INSTR定位第一个非0字符的下标,不用手动数有多少个前导零。
对应代码:

UPDATE
  table.name
SET
  id = CAST(
    SUBSTR(
      CAST(id AS STRING),
      REGEXP_INSTR(CAST(id AS STRING), r'[1-9]')
    ) AS INT64
  )
WHERE
  code = 'US'
  AND STARTS_WITH(CAST(id AS STRING), '0')

这个方案和方案1的输出结果完全一致,优势是如果后续有特殊的字符串处理需求(比如要保留特定长度的前缀、只清除特定位置的0),调整正则规则和截取逻辑更灵活。

执行前注意

  • 跑UPDATE前先拿SELECT验证结果,避免误改数据,可以先执行下面的语句抽100条核对输出:
SELECT
  id AS 原始id,
  CAST(CAST(id AS STRING) AS INT64) AS 处理后id
FROM table.name
WHERE code = 'US'
LIMIT 100
  • 你之前贴的UPDATE代码里WHERE条件末尾的and cast(id as string)是不完整的片段,直接执行会报语法错误,记得删掉或者补全对应的判断逻辑。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 17:27:52