MySQL选择查询字符串匹配

36

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

例如:

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

这个查询应该给我返回所有在姓名字段中出现“Bob Smith”的记录。

而我想做的是相反的。

我想找到所有姓名字段为查询中的字符串参数“Robert Bob Smith III, PhD.”的记录,而不是找到所有包含“Bob Smith”在姓名字段中的记录。


4
不确定我理解了。你能举个例子吗? - Pekka
必须同意@Pekka的观点。也许您可以提供几组输入数据示例,以及相应的搜索词。 - John Parker
3个回答

51

把 LIKE 反过来

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

没错。我尝试过这个,但是没有在结尾处使用CONCAT。非常好用。谢谢。 - JR Lawhorne
1
这会导致全表扫描吗?有没有使用索引的解决方案? - Landon Kuhn
@landon9720 是的。唯一可能使用的索引是FULLTEXT索引 - The Scrum Meister
1
如果您正在使用sqlite,可以使用' || '运算符连接字符串SELECT * FROM customers WHERE 'Robert Bob Smith III, PhD.' LIKE '%' || name || '%' ; - srj

12
你可以使用正则表达式来实现这个功能:
SELECT * FROM pet WHERE name REGEXP 'Bob|Smith'; 

我正在一个有200,000行的数据库上使用REGXP,但它并没有带来太多的效果... - user2060451

-6

不正确:

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应该是明显的

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


似乎你没有理解原始问题。 - Andres Ramos

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接