我是SQL的新手并拥有并发行。我想从我的数据库中删除,只要描述栏中的某个人有标签“#whatever”。我能够编写以下查询:
select id from table where description_field LIKE "%#whatever%" and user_id=333
但是,如果我在这里使用LIKE函数,它将删除它匹配的任何地方#whatever但我担心它可能会删除它有#whateverandthis的东西。
如何编写删除行的查询,只在描述中包含“#whatever”,而不是“#whateverandthis”或“#whateverorthis”等其他变体。
我想删除它所说的内容:
“我有很多乐趣#whatever”
但不是:
“我有很多乐趣#whateverAndWhatever”
答案 0 :(得分:2)
使用RLIKE
,LIKE的正则表达式版本:
WHERE description_field RLIKE '[[:<:]]#whatever[[:>:]]'
表达式[[:<:]]
和[[:>:]]
是前导和尾随“字边界”。
答案 1 :(得分:1)
最好将它们保存在多个列中,但
SELECT id FROM table WHERE decription_field REGEXP '[[:<:]]#whatever[[:>:]]' and user_id=333
可以做到这一点
答案 2 :(得分:0)
这样的事可能有用:
select id from table
where (' ' + description_field + ' ') LIKE "% #whatever %" and user_id=333
答案 3 :(得分:0)
对于您目前的情况,您的查询必须涵盖三个方案,第一个单词,中间单词和最后一个单词。所以你的查询可能类似于:
where user_id = 33
and
(
description_field like '%#whatever %' -- first word
or description_field like '% #whatever %' -- middle word
or description_field like '% #whatever' -- last word
)
或者,您可以处理这些正则表达式提案。他们可能会更好。