在 MySQL 中搜索行以查找子字符串

在某些情况下,你必须在表中搜索字符串或子字符串。

例如,你想知道 employee 表中有多少 Gmail 用户。另一个例子是在 employee 表中查找所有以 Je 开头的 firstname

在这里,搜索一个字符串或子字符串就出现在图片中,并且有不同的搜索方式。POSITION() 用于标准 SQL,LOCATE()% 通配符用于 MySQL,INSTR() 用于 Oracle。

我们将学习 MySQL 支持的方法,并观察哪种方法是在 MySQL 中搜索行以查找子字符串的最佳且简单的方法。你可以查看所有这些方法,然后决定哪种方法最适合你的情况。

方法 1:使用 % 通配符查找字符串/子字符串

% 通配符用于替换字符串中的一个或多个字符。此通配符与 LIKE 运算符一起使用,LIKE 运算符用于 WHERE 子句。

为了练习,我们创建了一个名为 employee 的新表。你可以使用下面给出的示例代码创建它并用数据填充它。

这样,我们在学习的同时就会步调一致。

#CreateemployeetableCREATETABLEemployee(idintnotnullprimarykey,firstnamevarchar(60)notnull,lastnamevarchar(60)notnull,gendervarchar(30)notnull,cityvarchar(40)notnull,emailvarchar(60)notnull);#Insertdataintoemployeetable.INSERTINTOemployeeVALUES(1,'James','Robert','Male','London','jrober@gmail.com'),(2,'Mary','Patricia','Female','Berlin','patricia@gmail.com'),(3,'John','Michael','Male','Paris','johnmichael@yahoo.com'),(4,'Jennifer','Linda','Female','Lisbon','jennifer@hotmail.com'),(5,'William','David','Male','Rome','wdwilliam@gmail.com'),(6,'Elizabeth','Barbara','Female','Dublin','elibarbara011@yahoo.com'),(7,'Richard','Joseph','Male','Oslo','richard@gmail.com'),(8,'Susan','Jessica','Female','Hamburg','susan01@yahoo.com'),(9,'Thomas','Charles','Male','Texas','thomas.charles@hotmail.com'),(10,'Karen','Nancy','Female','Washington','karenofficial@gmail.com');SELECT*FROMemployee;

输出:

在 MySQL 中搜索行以查找子字符串

让我们了解考虑使用%通配符搜索行以查找字符串或子字符串的不同场景。

场景 1:查找所有 Gmail 用户。意思是,我们必须在 email 中找到一个子字符串。

SELECTfirstname,lastnamefromemployeewhereemailLIKE'%@gmail.com';

上面的 SQL 查询将从 email 字符串包含 gmail.comemployee 表中选择 firstnamelastname

输出:

在 MySQL 中搜索行以查找子字符串

场景 2:选择以字母 a 结尾的姓氏。在这里,我们将找到一个字符串 lastname

SELECTlastnameFROMemployeeWHERElastnameLIKE'%a';

输出:

在 MySQL 中搜索行以查找子字符串

场景 3:让我们找到以 L 开头,以 n 结尾的 city 名称,中间有四个字符。一个下划线(_)代表一个字符。

SELECTcityFROMemployeeWHEREcityLIKE'L____n';

输出:

在 MySQL 中搜索行以查找子字符串

你可以在此处了解更多通配符。

方法 2:使用 LOCATE() 函数查找字符串/子字符串

LOCATE 函数返回子字符串在字符串中的第一次出现。如果无法在原始字符串中找到子字符串,则返回 0

此函数执行不区分大小写的搜索,这意味着 HELLOhelloLOCATE 函数相同。它与以下语法一起使用。

LOCATE(substring,string,start)

在上面给出的语法中,名为 substring 和 string 的前两个参数是必需的,但名为 start 的第三个参数是可选的。

你可能对输出的外观有疑问?让我们通过下图了解。

在 MySQL 中搜索行以查找子字符串

SELECTLOCATE("hotmail",email)FROMemployee;

输出:

在 MySQL 中搜索行以查找子字符串

结论

我们得出结论,不同的数据库平台支持不同的方法。LOCATE(),通配符与 MySQL 兼容。

我们借助示例了解了 MySQL 支持的搜索字符串或子字符串的方法。并观察输出了解。