如何在 MySQL Workbench 中使用 REGEXP_SUBSTR 或 REGEXP_EXTRACT 以及托管在 Google 云 SQL 上的数据库?
How to use REGEXP_SUBSTR or REGEXP_EXTRACT in MySQL Workbench with database hosted on Google Cloud SQL?
我正在开发 MYSQL 数据库,该数据库托管在 Google 云 SQL 上。我正在研究 MySQL Workbench 8.0 CE.
我想获取架构 projects
中 table p0999_pakbon
中 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".
时,它也不起作用
我收到这些错误:
功能projects.REGEXP_SUBSTR不存在
功能projects.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;
我正在开发 MYSQL 数据库,该数据库托管在 Google 云 SQL 上。我正在研究 MySQL Workbench 8.0 CE.
我想获取架构 projects
中 table p0999_pakbon
中 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".
时,它也不起作用我收到这些错误:
功能projects.REGEXP_SUBSTR不存在
功能projects.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;