MySQL LOCATE 与 Bigquery 的等价物是啥?
Posted
技术标签:
【中文标题】MySQL LOCATE 与 Bigquery 的等价物是啥?【英文标题】:What is the equivalent of MySQL LOCATE to Bigquery?MySQL LOCATE 与 Bigquery 的等价物是什么? 【发布时间】:2021-10-26 13:42:05 【问题描述】:所以我有这个带有LOCATE
函数的查询:
SELECT TRIM(CASE WHEN store_name like "%|%" THEN LEFT(store_name, LOCATE('|', store_name) - 1) ELSE
CASE WHEN store_name like "%,%" THEN LEFT(store_name, LOCATE(',', store_name) - 1) ELSE
CASE WHEN store_name like "% - %" THEN LEFT(store_name, LOCATE(' - ', store_name) - 1) ELSE
store_name
END
END
END)
一切正常,但我现在需要从 mysql 更改为 Bigquery。当我尝试在 Bigquery 编辑器中粘贴此查询时,出现错误:Function not found: LOCATE at [3:76]
【问题讨论】:
INSTR()
cloud.google.com/bigquery/docs/reference/standard-sql/… MySQL 中的 INSTR 和 LOCATE 仅在参数顺序上有所不同。
【参考方案1】:
使用 BigQuery 进行定位有不同的类似函数,例如 REGEXP_EXTRACT
[1]、INSTR
[2] 或 SUBSTR
[3] 函数。
[1]https://cloud.google.com/bigquery/docs/reference/legacy-sql#regularexpressionfunctions
[2]https://cloud.google.com/bigquery/docs/reference/standard-sql/string_functions#instr
[3]https://cloud.google.com/bigquery/docs/reference/standard-sql/functions-and-operators#substr
【讨论】:
【参考方案2】:考虑以下方法(使用REGEXP_EXTRACT_ALL)
select regexp_extract_all(store_name, r'(.*?)(?:,| - |\|)')[offset(0)]
如果应用于虚拟数据 - 输出如下
【讨论】:
以上是关于MySQL LOCATE 与 Bigquery 的等价物是啥?的主要内容,如果未能解决你的问题,请参考以下文章
sql MySQL中的instr()和locate()有什么区别?