MySQL INSTR函数
简介:本教程向您展示如何使用MySQL INSTR函数返回字符串首次出现的位置。
MySQL INSTR函数简介
有时,您想在字符串中找到子字符串,或者检查字符串中是否存在子字符串。
在这种情况下,您可以使用称为INSTR的字符串内置函数。
INSTR函数返回字符串中第一次出现子字符串的位置。
如果在str中找不到子字符串,则INSTR函数将返回零(0)。
下面说明了INSTR函数的语法。
INSTR(str,substr);
INSTR函数接受两个参数:
str是您要搜索的字符串。
substr是您要搜索的子字符串。
INSTR函数不区分大小写。
这意味着是否传递小写字母,大写字母,标题大写字母等都没有关系,结果始终相同。
如果希望INSTR函数以区分大小写的方式对非二进制字符串执行搜索,则可以使用BINARY运算符将INSTR函数的参数从非二进制字符串转换为二进制字符串。
MySQL INSTR函数示例
以下语句返回MySQL子串在MySQL INSTR字符串中的位置。
SELECT INSTR('MySQL INSTR', 'MySQL');
由于INSTR函数不区分大小写,因此以下语句返回相同的结果。
SELECT INSTR('MySQL INSTR', 'mysql');
若要强制INSTR函数基于区分大小写的方式进行搜索,请按以下方式使用BINARY运算符:
SELECT INSTR('MySQL INSTR', BINARY 'mysql');
结果是不同的,因为mysql和MySQL现在有了BINARY运算符。
INSTR函数与LIKE运算符
我们将使用示例数据库中的产品表。
假设您要查找名称包含car关键字的产品,则可以使用INSTR函数,如下所示:
SELECT productName FROM products WHERE INSTR(productname,'Car') > 0;
除了INSTR功能外,您还可以使用LIKE运算符来匹配Car模式。
SELECT productname FROM products WHERE productname LIKE '%Car%';
这两个查询返回相同的结果。
那么INSTR或LIKE运算符中哪个更快?
答案是它们是相同的。
它们都区分大小写,并执行全表扫描。
让我们在productname列上创建一个索引。
CREATE INDEX idx_products_name ON products(productname);
如果将LIKE运算符与前缀搜索一起使用,则在此索引列上,LIKE运算符的执行速度将比INSTR函数快。
请参阅以下语句。
SELECT productname FROM products WHERE productname LIKE '1900%';
您可以使用EXPLAIN语句检查它:
EXPLAIN SELECT productname FROM products WHERE productname LIKE '1900%';
并与使用INSTR函数的以下语句进行比较。
EXPLAIN SELECT productname FROM products WHERE instr(productname,'1900');
即使productname列具有索引,INSTR函数也会执行表扫描。
这是因为MySQL无法对INSTR函数的语义做出任何假设,因此MySQL可以利用其对LIKE运算符语义的理解。
测试字符串中是否存在子字符串的最快方法是使用全文索引。
但是,需要正确配置和维护索引。
在本教程中,您学习了如何使用INSTR函数查找字符串中第一次出现的子字符串的位置。