【问题标题】:mysql statement remove repeated words in stringmysql语句删除字符串中的重复单词
【发布时间】:2018-05-22 11:50:24
【问题描述】:

如果字符串列“标题”中有重复的单词,我希望能够使用允许我删除记录的 sql 语句。 标题中有几个重复的单词,例如“世界癌症存活率中的宫颈癌存活率”我想搜索并删除该字段,因为“癌症”一词重复。请注意,可能有另一个我不知道重复的词,所以我要查找的不仅仅是癌症词。

table structure
table name hospital
ID Varchar(32) utf8_general_ci
Title Varchar(300) utf8_general_ci
Summary Varchar(300) utf8_general_ci

【问题讨论】:

  • 在 MySQL 5.7 以下的版本中这是不可能的,因为 REGEXP/RLIKE 不支持反向引用。
  • mysql Ver 15.1 Distrib 10.3.6-MariaDB, for Linux (x86_64) using readline 5.1 我猜我的是最新版本的mysql应该没问题。
  • @danone 你有 mariadb,而不是 mysql。它是mysql的一个fork,但它们已经不一样了。
  • 这是否意味着我不能使用正则表达式在 mariadb 中查找重复的单词?
  • 您想DELETE 行吗?或者你说的“删除这个字段”是什么意思??

标签: duplicates mariadb


【解决方案1】:

(这适用于 MariaDB,不适用于 MySQL。)

这将匹配一个“单词”:

[[:<:]]\w+[[:>:]]

由于您拥有 MariaDB,因此可以使用此反向引用:

\1

所以,这应该匹配带有重复单词的title

title REGEXP [[:<:]](\w+)[[:>:]].*[[:<:]]\1[[:>:]]

(根据上下文,您可能需要将反斜杠加倍。)

参考:https://mariadb.com/kb/en/library/pcre/
另见REGEXP_REPLACE()https://mariadb.com/kb/en/library/regexp_replace/

【讨论】:

    猜你喜欢
    • 2012-03-14
    • 1970-01-01
    • 2013-12-15
    • 2013-08-11
    • 2013-05-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多