我想从表的字符串列中提取一个单词。
description =========================== abc order_id: 2 xxxx yyy aa mmm order_id: 3 nn kk yw
预期结果集
order_id =========================== 2 3
表格最多可包含100行,文本长度约为256个字符,而列始终存在一个order_id。因此,性能不是问题。
order_id
在Oracle中,我可以使用REGEXP_SUBSTR此问题。我将如何在MySQL中解决此问题?
REGEXP_SUBSTR
编辑1
我正在使用LOCATE和SUBSTR解决此问题。代码很丑。编写代码十分钟后,我咒骂那个编写了这么丑陋代码的家伙。
我没有在MySQL文档中找到REGEXP_SUBSTR函数。但我希望它存在。
答案:为什么不能优化表格?为什么数据以这种愚蠢的方式存储?
我给出的示例仅表示我要解决的问题。在实际情况下,我正在使用基于数据库的第三方排队软件来执行异步任务。队列将Ruby对象序列化为文本。我无法控制表结构或数据格式。队列中的任务可以重复执行。在我们的测试设置中,由于数据过时,一些重复执行的任务失败了。我必须删除这些任务以防止错误。这样的错误并不常见,因此我不想维护标准化的影子表。
“我没有 在MySQL文档中找到 REGEXP_SUBSTR 函数。但我希望它存在。”
是的,从MySQL8.0开始支持。正则表达式:
REGEXP_SUBSTR(expr, pat[, pos[, occurrence[, match_type]]]) 返回与模式pat指定的正则表达式匹配的字符串expr的子字符串,如果不匹配,则返回NULL。如果expr或pat为NULL,则返回值为NULL。
REGEXP_SUBSTR(expr, pat[, pos[, occurrence[, match_type]]])
返回与模式pat指定的正则表达式匹配的字符串expr的子字符串,如果不匹配,则返回NULL。如果expr或pat为NULL,则返回值为NULL。