BigQuery与MySQL中字符串前几位截取方法及BigQuery下SUBSTRING_INDEX函数报错解决方案问询
字符串截取:MySQL vs BigQuery 实现方案
MySQL 中的实现方式
你原本写的语句在MySQL里其实是完全可行的,因为MySQL原生支持SUBSTRING_INDEX函数。直接运行下面的代码就能得到你想要的结果:
SELECT TRIM(SUBSTRING_INDEX(name, '|', 1)) AS new_name FROM your_table;
这里SUBSTRING_INDEX(name, '|', 1)会截取第一个|分隔符之前的所有内容,再用TRIM()去除前后多余的空格,正好匹配你期望的输出。
BigQuery 报错的解决方案(替换SUBSTRING_INDEX)
BigQuery并没有提供SUBSTRING_INDEX函数,这就是你报错的原因。不过我们可以用BigQuery支持的函数来实现相同的效果,这里给你三种常用的方法:
方法1:使用SPLIT + OFFSET
这是最直观的方式,把字符串按|拆分成数组,再取第一个元素后去空格:
SELECT TRIM(SPLIT(name, '|')[OFFSET(0)]) AS new_name FROM your_table;
比如对于HDM | kjfsgjfgusgff,SPLIT会生成数组["HDM ", " kjfsgjfgusgff"],[OFFSET(0)]取第一个元素,最后TRIM去掉空格得到HDM。
方法2:使用REGEXP_EXTRACT正则提取
用正则匹配开头到第一个|之间的内容,再去空格:
SELECT TRIM(REGEXP_EXTRACT(name, r'^([^|]+)')) AS new_name FROM your_table;
正则表达式^([^|]+)的意思是:从字符串开头开始,匹配所有不是|的字符,直到遇到第一个|为止。
方法3:使用LEFT + INSTR
先找到|的位置,再截取该位置之前的内容:
SELECT TRIM(LEFT(name, INSTR(name, '|') - 1)) AS new_name FROM your_table;
INSTR(name, '|')会返回|在字符串中的位置,LEFT(name, 位置-1)就截取到|之前的部分,最后TRIM处理空格。
这三种方法都能实现你的需求,选你觉得最顺手的即可~
内容的提问来源于stack exchange,提问作者Chique_Code
相关产品推荐
相关产品推荐

