我正在开发一个托管在Google Cloud SQL上的MYSQL数据库。我正在通过MySQL Workbench 8.0 CE工作。
我想在表p0999_pakbon
架构projects
中获取element_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"(时,它也不起作用。
我收到这些错误:
函数项目。REGEXP_SUBSTR不存在
函数项目。REGEXP_EXTRACT不存在
当我以错误的格式键入参数时,我收到此错误消息:
调用存储的功能"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;