如何在mysql工作台中使用regexp\u substr或regexp\u extract,将数据库托管在googlecloudsql上?

cuxqih21  于 2021-07-29  发布在  Java
关注(0)|答案(1)|浏览(452)

我正在开发一个mysql数据库,它托管在googlecloudsql上。我正在使用mysql workbench 8.0ce。
我想得到 element_name 表中的列 p0999_pakbon 在架构中 projects . 元素名称类似于“lvls 45 beam 1”和“spano 18 stud 1”。我想得到“45级”和“18级”
在本地计算机上托管的数据库的旧副本中,以下代码可以完美地工作:

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

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

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

它不起作用。当我把regex改成非常简单的“a”时,它也不起作用。
我得到这些错误:
函数projects.regexp\u substr不存在
函数projects.regexp\u extract不存在
当我以错误的格式键入参数时,会收到以下错误消息:
调用存储函数“regexp\u extract”时参数不正确
有人知道怎么解决我的问题吗?或者有解决办法?

enxuqcxy

enxuqcxy1#

假设你只想要前两个词,你可以用 SUBSTRING_INDEX 在这里,大多数mysql版本都可以使用:

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

如果您还需要Assert第一个术语包含大写字母,第二个数字,您可以使用 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;

相关问题