繁体   English   中英

mysql:查找行,该行的字段为“字符串”的子字符串

[英]mysql: find rows which have a field that is a substring of “string”

有没有一种方法可以写一个sql查询来查找所有行,其中字段值是给定字符串的子字符串。

例:

table names

Name      |      Nickname
rohit            iamrohitbanga
banga            rohitnick
sinan            unur

查询应该是这样的

select * from names where Name is a substring of "who is rohit";   // to get first row
select * from names where Nickname is a substring of "who is rohitnick";   // to get second row
select * from names where Name is a substring of "who is unur and banga"
or Nickname is substring of "who is unur and banga";   // to get second and third row

这怎么可能?

如果不可能,那么我将不得不在Java中实现该行为。 我正在使用jdbc:mysql驱动程序连接到数据库。

更新您的解决方案工作

现在有点曲折。 如果我们要检查字段的子字符串是否作为我们指定的字符串的子字符串出现。

select * from names where Name is a substring of "who is sina";   // to get third row

如果必须在文本中找到NameNickname之一

SELECT *
FROM names
WHERE instr("who is Rohit", Name) > 0
   OR instr("who is Rohit", Nickname) > 0

没有索引可用于此目的,因此大型表可能需要很长时间。

所有这些方法的一个问题是您的索引不正确。 您必须对每一行进行表扫描,这意味着随着表大小的增加,性能只会越来越差。

如果您的桌子很大,我会重新考虑这种方法。 也许您需要像Lucene这样的索引搜索器。

SELECT * FROM names WHERE INSTR(Nickname,Name) > 0;

或等效地:

SELECT * FROM names WHERE LOCATE(Name,Nickname) > 0;

您也可以反转LIKE条件。

select * from names where "who is rohit" LIKE  CONCAT('%', Name, '%');

注意,这可能不会比instr(“ who is Rohit”,Name)快,但可能会更快。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM