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

BigQuery中SUBSTRING提取字符串时遇语法错误:期望'('或UNNEST

问题:BigQuery字符串截取报错,提示"Expected '(' or keyword UNNEST but got identifier 'members_ids'"

执行字符串截取代码时出现如下错误:

Message: Syntax error: Expected "(" or keyword UNNEST but got identifier "members_ids" 

样本数据:

members_ids
PID-160343,DID-28626
PID-142665,DID-1901

编写的SQL代码:

select
    channel_members_ids
    , SUBSTRING(members_ids, 1, POSITION(',' IN members_ids)-1) as patient_id
from `bigquery_production`.my_warehouse.desired_table limit 2

尝试过使用unnest(),但仍出现相同错误,求问题原因及其他实现方式。

解决方案

错误原因

你用的POSITION(',' IN members_ids)是PostgreSQL等其他SQL方言的语法,BigQuery不支持这种写法,这才导致了语法错误。BigQuery中要找字符的位置,得用STRPOS函数。

修正后的基础写法

把POSITION替换成STRPOS即可:

select
    channel_members_ids
    , SUBSTRING(members_ids, 1, STRPOS(members_ids, ',') - 1) as patient_id
from `bigquery_production`.my_warehouse.desired_table 
limit 2

其他实现方式

  1. 用SPLIT拆分取第一个元素
    这种写法更简洁,直接拆分字符串后通过OFFSET(0)取第一个部分:
select
    channel_members_ids
    , SPLIT(members_ids, ',')[OFFSET(0)] as patient_id
from `bigquery_production`.my_warehouse.desired_table 
limit 2
  1. 用正则表达式提取
    如果字符串格式固定,用REGEXP_EXTRACT匹配逗号前的所有内容也可以:
select
    channel_members_ids
    , REGEXP_EXTRACT(members_ids, r'^[^,]+') as patient_id
from `bigquery_production`.my_warehouse.desired_table 
limit 2

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.26 03:43:17