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 的等价物是啥?的主要内容,如果未能解决你的问题,请参考以下文章

mysql字符串转数字类型

sql MySQL中的instr()和locate()有什么区别?

MySQL使用locate函数来进行模糊搜索

mysql 变量定义 sql查询

函数:MySQL中字符串匹配函数LOCATE和POSITION使用方法

在 LOCATE 中使用用户定义的变量时,MySQL 非法混合排序规则