MySQL的LOCATE函数在BigQuery中的等价替代函数是什么
解决方案
报错原因
BigQuery未提供MySQL原生的LOCATE函数,需替换为BigQuery支持的等效函数,同时注意参数顺序差异:
- MySQL
LOCATE(待查找子串, 原字符串):返回子串在原字符串中首次出现的位置索引 - BigQuery 等效函数为
STRPOS(原字符串, 待查找子串):功能完全一致,仅参数顺序和LOCATE相反,调整参数顺序即可正常运行
修改后可直接运行的代码
SELECT TRIM(CASE WHEN store_name like "%|%" THEN LEFT(store_name, STRPOS(store_name, '|') - 1) ELSE CASE WHEN store_name like "%,%" THEN LEFT(store_name, STRPOS(store_name, ',') - 1) ELSE CASE WHEN store_name like "% - %" THEN LEFT(store_name, STRPOS(store_name, ' - ') - 1) ELSE store_name END END END) AS cleaned_store_name
可选简化写法
你可以使用BigQuery的正则提取函数简化嵌套CASE逻辑,实现相同效果:
SELECT TRIM(COALESCE(REGEXP_EXTRACT(store_name, r'^.*?(?=\||,| - )'), store_name)) AS cleaned_store_name
内容的提问来源于stack exchange,提问作者Tenserflu
相关产品推荐
相关产品推荐

