我正在开发一个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”时参数不正确
有人知道怎么解决我的问题吗?或者有解决办法?
1条答案
按热度按时间enxuqcxy1#
假设你只想要前两个词,你可以用
SUBSTRING_INDEX
在这里,大多数mysql版本都可以使用:如果您还需要Assert第一个术语包含大写字母,第二个数字,您可以使用
REGEXP
: