一尘不染

mysql中REGEXP_SUBSTR的等效项是什么?

sql

我想从表的字符串列中提取一个单词。

description
===========================
abc order_id: 2 xxxx yyy aa
mmm order_id: 3 nn kk yw

预期结果集

order_id
===========================
2
3

表格最多可包含100行,文本长度约为256个字符,而列始终存在一个order_id。因此,性能不是问题。

在Oracle中,我可以使用REGEXP_SUBSTR此问题。我将如何在MySQL中解决此问题?

编辑1

我正在使用LOCATE和SUBSTR解决此问题。代码很丑。编写代码十分钟后,我咒骂那个编写了这么丑陋代码的家伙。

我没有在MySQL文档中找到REGEXP_SUBSTR函数。但我希望它存在。

答案:为什么不能优化表格?为什么数据以这种愚蠢的方式存储?

我给出的示例仅表示我要解决的问题。在实际情况下,我正在使用基于数据库的第三方排队软件来执行异步任务。队列将Ruby对象序列化为文本。我无法控制表结构或数据格式。队列中的任务可以重复执行。在我们的测试设置中,由于数据过时,一些重复执行的任务失败了。我必须删除这些任务以防止错误。这样的错误并不常见,因此我不想维护标准化的影子表。


阅读 434

收藏
2021-03-17

共1个答案

一尘不染

“我没有 在MySQL文档中找到 REGEXP_SUBSTR 函数。但我希望它存在。”

是的,从MySQL8.0开始支持。正则表达式

REGEXP_SUBSTR(expr, pat[, pos[, occurrence[, match_type]]])

返回与模式pat指定的正则表达式匹配的字符串expr的子字符串,如果不匹配,则返回NULL。如果expr或pat为NULL,则返回值为NULL。

2021-03-17