关于“反向 LIKE”的 MySQL 问题

MySQL question about "reverse LIKEs"

提问人:Andrew G. Johnson 提问时间:8/28/2009 最后编辑:chollidaAndrew G. Johnson 更新时间:3/24/2016 访问量:983

问:

好吧,鉴于我有一个值,我想检查数据库中的潜在匹配项(在一个 varchar 字段中),所以我写了这样的东西:

SELECT * FROM table WHERE column LIKE "%value%"

如果值类似于“test”并且列的值为“this is a test”,这将起作用,但是如果它被反转,那么我将不会得到匹配,我已经尝试过以下事情:

SELECT * FROM table WHERE CONCAT("%",column,"%") LIKE "value"

但不知道如何向谷歌表达以获得我需要的回复,请帮忙!

SQL 的MySQL

评论

0赞 Irfy 8/28/2009
似乎他有一组列,列名称中的内容相似,并想看看他的“值”是否包含在其中任何一个中......
0赞 nickf 8/28/2009
当我阅读它时,列数据是,他的搜索词是"test""this is a test"
0赞 Charles Bretana 8/28/2009
一种情况是,行表示关键字,他想查找候选文本 (@Value) 中有哪些关键字(列值)
0赞 joshweir 3/24/2016
MySQL的可能副本:什么是LIKE的反向版本?

答:

12赞 Eric 8/28/2009 #1

您可以反转 like 语句。只是使用与常规查询相同的语法:like

select
    *
from
    table
where
    'value' like concat('%', column, '%')

当然,如果你觉得狂野和疯狂,你也可以使用 instr

select * from table where instr('value', column) > 0

我不知道哪个更快,因为我没有要测试的MySQL实例,但值得尝试两者,看看哪个获胜。

评论

1赞 OMG Ponies 8/28/2009
它将使用索引(如果列存在索引)来转换数据 - 而不是查找。使用内联视图将所需内容添加到列中,然后进行比较会更快。如果您只想要单词出现的行,则最好使用 INSTR。
3赞 LukeH 8/28/2009 #2
SELECT *
FROM table
WHERE 'value' LIKE CONCAT('%', column, '%')