MySQL SELECT 查询字符串匹配

Posted

技术标签:

【中文标题】MySQL SELECT 查询字符串匹配【英文标题】:MySQL SELECT query string matching 【发布时间】:2011-06-22 10:03:22 【问题描述】:

通常,当使用 SELECT 查询数据库时,通常希望找到与给定搜索字符串匹配的记录。

例如:

SELECT * FROM customers WHERE name LIKE '%Bob Smith%';

该查询应该给我所有在名称字段中出现“Bob Smith”的记录。

我想做的恰恰相反。

我不想查找名称字段中包含“Bob Smith”的所有记录,而是要查找名称字段位于“Robert Bob Smith III, PhD.”中的所有记录,这是查询的字符串参数。

【问题讨论】:

不确定我是否理解。你能举个例子吗? 必须同意@Pekka。也许如果您提供一些您期望匹配的输入数据示例集和相关搜索词。 【参考方案1】:

不正确:

SELECT * FROM customers WHERE name LIKE '%Bob Smith%';

改为:

select count(*)
from rearp.customers c
where c.name  LIKE '%Bob smith.8%';

select count 只会查询(总计)

C 会将 db.table 链接到您需要此索引的名称行

LIKE 应该是 obvs

8 将调用 DB 8 或更少的所有引用(不是真的需要,但我喜欢整洁)

【讨论】:

你好像没看懂原问题。【参考方案2】:

你可以像这样使用正则表达式:

SELECT * FROM pet WHERE name REGEXP 'Bob|Smith'; 

【讨论】:

我在一个 200,000 行的数据库上使用 REGXP,它并没有带来一大堆......【参考方案3】:

把LIKE转过来

SELECT * FROM customers
WHERE 'Robert Bob Smith III, PhD.' LIKE CONCAT('%',name,'%')

【讨论】:

正是它。我试过这个,但最后没有用 CONCAT 来做。奇迹般有效。谢谢。 这会导致全表扫描吗?有没有使用索引的解决方案? @landon9720 是的。唯一可能使用的索引是FULLTEXT index 如果你使用 sqlite,你可以用 '||' 连接字符串运营商SELECT * FROM customers WHERE 'Robert Bob Smith III, PhD.' LIKE '%' || name || '%' ;

以上是关于MySQL SELECT 查询字符串匹配的主要内容,如果未能解决你的问题,请参考以下文章

mysql关键字匹配度模糊查询

mysql 总结

Mysql 查询条件中字符串尾部有空格也能匹配上的问题

Mysql 一个字段匹配多个字符

MySQL查询LIKE如何匹配下划线 通配符转义

oracle 中查询的模糊匹配