繁体   English   中英

如何在 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?

我正在处理托管在 Google Cloud SQL 上的 MYSQL 数据库。我正在使用 MySQL Workbench 8.0 CE。

我想在架构projects的表p0999_pakbon中获取element_name列的 substring。 元素名称类似于“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 中获得 substring 的标准 function。但是,此代码在我托管在 Google Cloud SQL 中的数据库中不起作用。在此页面上https://cloud.google.com/bigreference//doc 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 不存在

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

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

假设您只想要前两个词,您可以在此处使用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;

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM