我在这里使用自我连接查询与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;单词只因为只匹配一个整个单词,但它正在删除单词中的单词。
答案 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%的解决方案,但在大多数情况下都可以使用。