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

时间:2016-04-18 06:17:21

标签: mysql regex

我在这里使用自我连接查询与case语句。我的查询应该像它匹配来自数据库的整个确切单词而不应该匹配单词中的单词。

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

当我匹配时,它可以匹配确切的单词,但问题是它在单词内更新单词。请在这里查看我的查询。

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

请建议解决方案。它应该删除&#34; ich &#34;单词只因为只匹配一个整个单词,但它正在删除单词中的单词。

2 个答案:

答案 0 :(得分:0)

在上面的查询中,您正在替换'ich' to ''而不是一个确切的单词,因此它会在整个字符串中使用字符序列。如果您想要确切的单词,那么您可以使用空格like ' ich '管理确切的单词。 / p>

您修改的查询将是,

选项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[[:>:]]')

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

答案 1 :(得分:0)

您可以使用

解决该限制
REPLACE(concat(' ', a.column, ' '), ' ich ', ' ')

问题是,您可以在条目和应​​该作为整个单词替换的单词中添加假空格。不是100%的解决方案,但在大多数情况下都可以使用。