如何在 MySQL Workbench 中使用 REGEXP_SUBSTR 或 REGEXP_EXTRACT 以及托管在 Google Cloud SQL 上的数据库?

Posted

技术标签:

【中文标题】如何在 MySQL Workbench 中使用 REGEXP_SUBSTR 或 REGEXP_EXTRACT 以及托管在 Google Cloud SQL 上的数据库?【英文标题】:How to use REGEXP_SUBSTR or REGEXP_EXTRACT in MySQL Workbench with database hosted on Google Cloud SQL? 【发布时间】:2020-06-11 09:13:05 【问题描述】:

我正在开发托管在 Google Cloud SQL 上的 mysql 数据库。我正在使用 MySQL Workbench 8.0 CE。

我想在架构projects 中获取表p0999_pakbonelement_name 列的子字符串。 元素名称类似于“LVLS 45 Beam 1”和“SPANO 18 Stud 1”。我想得到:“LVLS 45”和“SPANO 18”

在我的本地计算机上托管的数据库的旧副本中,以下代码完美运行:

SELECT REGEXP_SUBSTR(pp.element_name, "[A-Z]+[:space:][0-9]+")
FROM projects.p0999_pakbon pp

这是因为REGEXP_SUBSTR 是在 MySQL 中获取子字符串的标准函数。 但是,此代码在我托管在 Google Cloud SQL 中的数据库中不起作用。在此页面上https://cloud.google.com/bigquery/docs/reference/standard-sql/functions-and-operators#regexp_extract 我似乎读到Google Cloud SQL 使用REGEXP__EXTRACT 代替。但是当我尝试以下操作时:

SELECT REGEXP_EXTRACT(pp.element_name, "[A-Z]+[:space:][0-9]+")
FROM projects.p0999_pakbon pp

它不起作用。当我将正则表达式更改为像“A”这样的非常简单的表达式时,它也不起作用。

我收到以下错误:FUNCTION projects.REGEXP_SUBSTR 不存在FUNCTION projects.REGEXP_EXTRACT 不存在

当我以错误的格式键入参数时,我收到以下错误消息:调用存储函数“REGEXP_EXTRACT”时参数不正确

有人知道如何解决我的问题吗?或者也许有解决方法?

【问题讨论】:

真正的问题是谷歌有什么版本的 MySQL。 Workbench 只是一个 UI;它的版本无关紧要。我怀疑他们不使用 MySQL 8.0,这是找到这些功能的地方。 (另一个是最新版本的 MariaDB。) 【参考方案1】:

假设你只想要前两个词,你可以在这里使用SUBSTRING_INDEX,它应该适用于大多数版本的 MySQL:

SELECT SUBSTRING_INDEX('LVLS 45 Beam 1', ' ', 2) AS item
FROM yourTable;

如果您还需要断言第一项包含大写,第二个数字,您可以使用REGEXP

SELECT
    CASE WHEN 'LVLS 45 Beam 1' REGEXP '^[A-Z]+ [0-9]+'
         THEN SUBSTRING_INDEX('LVLS 45 Beam 1', ' ', 2)
         ELSE 'no match' END AS item
FROM yourTable;

【讨论】:

太棒了!当然,您是否可以在 MySQL x Google Cloud SQL 中使用 REGEXP_SUBSTR 或 REGEXP_EXTRACT 仍然是一个有趣的问题,因为在某些情况下这种解决方法可能不起作用。但对我来说,它解决了问题! @Josien 是的,这是个好问题。如果 Google Cloud SQL 真的支持完整的 MySQL 8+ 引擎,那么实际上REGEXP_SUBSTR 应该可以工作。

以上是关于如何在 MySQL Workbench 中使用 REGEXP_SUBSTR 或 REGEXP_EXTRACT 以及托管在 Google Cloud SQL 上的数据库?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 MySQL Workbench 中使用 Python 脚本执行 SQL 查询

如何在 MySQL Workbench 中隐藏/查看结果网格?

如何使用 MySQL Workbench 创建函数?

如何在 phpmyadmin/MySQL Workbench 中修改只能使用 FlameRobin 访问的数据库

如何在 Mysql Workbench GUI 中查看表格内容?

如何在 MySQL Workbench 中执行多个 SQL 查询?