我如何在SQL中使用LIKE函数,但确切的单词?

时间:2014-01-14 21:51:35

标签: mysql sql database subquery

我是SQL的新手并拥有并发行。我想从我的数据库中删除,只要描述栏中的某个人有标签“#whatever”。我能够编写以下查询:

select id from table where description_field LIKE "%#whatever%" and user_id=333

但是,如果我在这里使用LIKE函数,它将删除它匹配的任何地方#whatever但我担心它可能会删除它有#whateverandthis的东西。

如何编写删除行的查询,只在描述中包含“#whatever”,而不是“#whateverandthis”或“#whateverorthis”等其他变体。

我想删除它所说的内容:

“我有很多乐趣#whatever”

但不是:

“我有很多乐趣#whateverAndWhatever”

4 个答案:

答案 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
)

或者,您可以处理这些正则表达式提案。他们可能会更好。