我在这里使用自连接查询和 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/