在 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 中使用正则表达式选择和替换数据的主要内容,如果未能解决你的问题,请参考以下文章