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 查询字符串匹配的主要内容,如果未能解决你的问题,请参考以下文章