如何在BigQuery中提取列内以‘ - ’分隔的第二个子串?
BigQuery 对应 MySQL SUBSTRING_INDEX 的字符串提取语句
需求说明
现有数据:
id val 1 ajkdks - jkdj 2 djs - djsd
需要提取val字段中" - "分隔后的第二个值,得到结果:
id val 1 jkdj 2 djsd
已知MySQL中使用以下语句实现:
SUBSTRING_INDEX(SUBSTRING_INDEX(val, " - ", 2)," - ",-1)
BigQuery 实现方式
方法1:使用 SPLIT 函数
BigQuery的SPLIT函数可将字符串按指定分隔符拆分为数组,直接取数组的第二个元素(BigQuery数组索引从1开始):
SELECT id, SPLIT(val, " - ")[OFFSET(1)] AS val FROM your_table_name
方法2:使用 REGEXP_EXTRACT 函数
若分隔符格式固定,可通过正则匹配提取分隔符后的内容:
SELECT id, REGEXP_EXTRACT(val, r' - (.*)$') AS val FROM your_table_name
方法3:模拟MySQL SUBSTRING_INDEX 逻辑
如果想完全对应MySQL的嵌套调用逻辑,也可以用正则组合实现,但写法相对繁琐,仅作参考:
SELECT id, REGEXP_EXTRACT( REGEXP_REPLACE(val, r'(.* - ){2}.*', r'\1'), r' - (.*)$' ) AS val FROM your_table_name
内容的提问来源于stack exchange,提问作者Ririn
相关产品推荐
相关产品推荐

