Mysql 查询匹配精确的单词并从数据库中删除该精确的单词

标签 mysql regex

我在这里使用自连接查询和 case when 语句。我的查询应该像匹配数据库中的整个单词一样工作,而不应该匹配单词中的单词。

在我找到精确的单词匹配后,它应该从该字符串中删除该单词并更新数据库。

当我匹配时,它可以匹配确切的单词,但问题是它会更新单词中的单词。请在此处查看我的查询。

update table1 a
left join table1 b on
    (a.id = b.id)
SET a.column = CASE
         WHEN b.column2 IS NOT NULL THEN REPLACE(a.column, 'ich', '')
       END       
       where (a.column REGEXP '[[:<:]]ich[[:>:]]')

原始字符串(列):

ich fühlte mich beobachtet, konnte nicht in ruhe auswählen

以上查询输出字符串(列):

fühlte m beobachtet,  nt  ruhe auswählen

输出必须来(列):

fühlte mich beobachtet, konnte nicht in ruhe auswählen

请提出解决方案。它应该仅删除“ich”单词,因为仅匹配一个完整单词,但它正在删除单词中的单词。

最佳答案

在上面的查询中,您将 'ich' 替换为 '' 不是一个精确的单词,因此它在整个字符串中采用 ich 字符序列,如果您想要精确的单词,那么您可以使用以下命令来管理精确的单词空格如“ich ”

您修改后的查询将是,

选项 1

update table1 a
left join table1 b on
    (a.id = b.id)
SET a.column = CASE
         WHEN b.column2 IS NOT NULL THEN REPLACE(a.column, ' ich ', ' ')
       END       
       where (a.column REGEXP '[[:<:]]ich[[:>:]]')

选项2:您也可以使用concat函数,在这里您可以在要搜索的单词之前或之后添加空格。

update table1 a
    left join table1 b on
        (a.id = b.id)
    SET a.column = CASE
             WHEN b.column2 IS NOT NULL THEN REPLACE(concat(' ', a.column, ' '), ' ich ', ' ') 
           END       
           where (a.column REGEXP '[[:<:]]ich[[:>:]]')

注意:我建议您使用选项二来防止虚假空间。

关于Mysql 查询匹配精确的单词并从数据库中删除该精确的单词,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36686685/

相关文章:

regex - 如何用分组解释正则表达式减法

php - select查询中的where条件

php - 如何将查询结果改为数组

MySQL:两个不同分组的计数和总计

php正则表达式转义特殊字符

php - PHP preg_replace() 中的正则表达式产生空结果

php - 仅在 mysql 数据库中插入一次。

mysql - 来自 MySQL 的不一致结果集

JavaScript正则表达式在字符串中间查找单词

正则表达式获取两个字符之间的文本