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
其他实现方式
- 用SPLIT拆分取第一个元素
这种写法更简洁,直接拆分字符串后通过OFFSET(0)取第一个部分:
select channel_members_ids , SPLIT(members_ids, ',')[OFFSET(0)] as patient_id from `bigquery_production`.my_warehouse.desired_table limit 2
- 用正则表达式提取
如果字符串格式固定,用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
相关产品推荐
相关产品推荐

