在 mySql 中使用正则表达式选择和替换数据

Posted

技术标签:

【中文标题】在 mySql 中使用正则表达式选择和替换数据【英文标题】:select and replace data using regexp in mySql 【发布时间】:2019-04-05 17:53:16 【问题描述】:

我是 mysql 的新手。我有一张水果表(超过 10k 行)。有记录的水果名称是:

apples
apples_2
apples_3
...

我正在尝试用正则表达式替换苹果下的_2_3 ...(以消除_\d),以便能够对另一个有预算的列求和。(当时认为按水果分组会干活)

我正在使用此代码:

SELECT REGEXP_replace(t.fruit,'_\\d','') AS `fruitName` from Select(.....) t;

我尝试过\d\\d,但它不正确,问题是当它找到相同的数据时,它会像下一个一样回答。

apples_2 -- applesapples 
apples_2 -- applesapplesapples 
apples_2 -- applesapplesapplesapples 
apples_2 -- applesapplesapplesapplesapples

我错过了什么?

【问题讨论】:

您的查询对我有用,除非问题出在他的子查询中(您没有显示):db-fiddle.com/f/jmJ8YsjV7PhM6DLdpCs7xe/0 表格设计上还有一个问号:为什么是_2、_3等?据推测,这些后缀表示可能应该在另一列中标识的内容。 子修复依赖于先前的计算,在顶层需要总结(假设不同的折扣政策等)。给出 t 表的子查询正常工作,只是根据名称进行一些计算,并在左侧给出这个列表) 我还发现它通常会在某些行之后执行此操作,而不仅仅是在找到 _2 时执行此操作 @guido - 我的回答解释了为什么它对你有用。 【参考方案1】:

这是您使用的特定版本中REGEXP_REPLACE() 的错误。请升级(或降级)。

8.0.12 的更新日志中写道:

REGEXP_REPLACE() 一个结果集行的结果可能会结转到下一行,从而导致当前行中的先前结果累积。 (错误 #27992118、错误 #90803)

8.0.14 已发布。

【讨论】:

虽然我使用的是社区 8.0.11,但此问题已修复。我已经从安装程序升级到 8.0.12,它工作正常 我发现 regexp_replace 与 group by 有问题,有什么解决方法吗? @kyrpav - 我还没有听说过解决方法;现在你升级了有什么问题? (或者我误解你了?)如果是不同的查询,请提供细节。 如果我不按它进行分组,它会替换名称并删除 _2,_3 但如果我尝试分组以汇总总和数字,那么它会删除水果列中的所有数据并给出空列 @kyrpav - 如果您需要这方面的帮助,请开始一个新问题,使用 8.0.12,并专注于它的问题。

以上是关于在 mySql 中使用正则表达式选择和替换数据的主要内容,如果未能解决你的问题,请参考以下文章

UE中如何使用正则替换行中部分字符串

如何在 MySQL 中进行正则表达式替换?

mysql 正则表达式替换,把指定位置随机数替换成固定数字

MySQL 上的 URL 正则表达式搜索和替换(在 WordPress 中)

使用正则表达式替换文件数据

如何使用选择性正则表达式在熊猫系列中执行替换?