【问题标题】:MySQL question about "reverse LIKEs"MySQL关于“反向LIKEs”的问题
【发布时间】:2016-03-24 07:52:45
【问题描述】:

鉴于我有一个值,我想检查数据库中的潜在匹配项(在一个 varchar 字段中),所以我写了如下内容:

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

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

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

但不知道如何向 Google 表达这句话以获得我需要的回复,请帮忙!

【问题讨论】:

  • 似乎他有一组列名中包含类似内容的列,并想看看他的“价值”是否包含在其中任何一个中......
  • 我看了,列数据是"test",他的搜索词是"this is a test"
  • 一种场景是行代表关键词,他想找出候选文本(@Value)中有哪些关键词(列Values)

标签: sql mysql


【解决方案1】:

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

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

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

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

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

【讨论】:

  • 它将使用索引(如果列存在索引)来转换数据 - 而不是查找。使用内联视图将您想要的内容添加到列中会更快,然后进行比较。如果您只想要单词出现的行,最好使用 INSTR。
【解决方案2】:
SELECT *
FROM table
WHERE 'value' LIKE CONCAT('%', column, '%')

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-07-19
    • 2019-01-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多