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

BigQuery中如何按字符位置而非分隔符拆分字符串?

解决方案

问题分析

你用split函数后Column2为空,大概率是原字符串里的空白字符不是普通空格(比如全角空格、制表符),或者存在多个连续空白字符导致拆分异常。不过既然你已经明确字符串的格式是固定的,按字符位置截取是更可靠的方案,完全匹配你的需求。

方案1:按固定字符位置截取

根据你给出的位置规则(假设字符串索引从0开始),可以用字符串截取函数直接提取各字段:

示例SQL(以BigQuery为例)

SELECT
  SUBSTR(Column1, 0, 12) AS `column 1`,
  SUBSTR(Column1, 13, 1) AS `column 2`,
  SUBSTR(Column1, 14, 4) AS `column 3`,
  SUBSTR(Column1, 18, 2) AS `column 4`
FROM
  your_table;

不同引擎的语法调整

  • 如果是MySQL(索引从1开始):
SELECT
  SUBSTR(Column1, 1, 12) AS `column 1`,
  SUBSTR(Column1, 14, 1) AS `column 2`,
  SUBSTR(Column1, 15, 4) AS `column 3`,
  SUBSTR(Column1, 19, 2) AS `column 4`
FROM
  your_table;
  • 如果是Python:
def split_row(s):
    return {
        'column 1': s[0:12],
        'column 2': s[13],
        'column 3': s[14:18],
        'column 4': s[18:20]
    }

方案2:修复split函数的问题

如果坚持用拆分方式,先统一空白字符为单个空格再拆分:

示例SQL(BigQuery)

SELECT
  SPLIT(REGEXP_REPLACE(Column1, r'\s+', ' '), ' ')[OFFSET(0)] AS `column 1`,
  SUBSTR(SPLIT(REGEXP_REPLACE(Column1, r'\s+', ' '), ' ')[OFFSET(1)], 0, 1) AS `column 2`,
  SUBSTR(SPLIT(REGEXP_REPLACE(Column1, r'\s+', ' '), ' ')[OFFSET(1)], 1, 4) AS `column 3`,
  SUBSTR(SPLIT(REGEXP_REPLACE(Column1, r'\s+', ' '), ' ')[OFFSET(1)], 5, 2) AS `column 4`
FROM
  your_table;

这里先用REGEXP_REPLACE把所有连续空白字符替换成单个空格,再拆分,然后对第二个拆分结果继续截取子串。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 20:21:11