![](/img/trans.png)
[英]How to use regexp_count with regexp_substr to output multiple matches per string in SQL (Redshift)?
[英]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.