MySQL中的INSTR函数是一个用于字符串搜索的函数,它返回一个字符串在另一个字符串中的位置。该函数不区分大小写。还有和该函数执行效果一样的LOCATE函数。
INSTR(string, substring)
其中,string是要搜索的字符串,substring是要查找的子字符串。函数返回substring在string中的位置,如果未找到,则返回0。
mysql> SELECT INSTR('foobarbar', 'bar'),INSTR('foobarbar', 'BAR'),INSTR('xbar', 'foobar'); +---------------------------+---------------------------+-------------------------+ | INSTR('foobarbar', 'bar') | INSTR('foobarbar', 'BAR') | INSTR('xbar', 'foobar') | +---------------------------+---------------------------+-------------------------+ | 4 | 4 | 0 | +---------------------------+---------------------------+-------------------------+
这是详细信息得内容。
-- ---------------------------- -- Table structure for student -- ---------------------------- DROP TABLE IF EXISTS `student`; CREATE TABLE `student` ( `id` int(11) NOT NULL AUTO_INCREMENT, `name` varchar(50) COLLATE utf8_unicode_ci DEFAULT NULL, `score` int(11) DEFAULT NULL, PRIMARY KEY (`id`) ) ENGINE=MyISAM AUTO_INCREMENT=6 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; -- ---------------------------- -- Records of student -- ---------------------------- INSERT INTO `student` VALUES ('1', '张三名', '80'); INSERT INTO `student` VALUES ('2', '李四浩', '90'); INSERT INTO `student` VALUES ('3', '王五期', '70'); INSERT INTO `student` VALUES ('4', '赵六三', '40'); INSERT INTO `student` VALUES ('5', '三七熊', '60');
原始数据
mysql> SELECT * from student; +----+-----------+-------+ | id | name | score | +----+-----------+-------+ | 1 | 张三名 | 80 | | 2 | 李四浩 | 90 | | 3 | 王五期 | 70 | | 4 | 赵六三 | 40 | | 5 | 三七熊 | 60 | +----+-----------+-------+
假设我们有一个名为student的表,其中包含一个名为name的字段,我们想要查找所有包含特定子字符串的姓名。我们可以使用INSTR函数来筛选这些地址。例如:
mysql> SELECT * FROM student WHERE INSTR(name, '张') = 1; +----+-----------+-------+ | id | name | score | +----+-----------+-------+ | 1 | 张三名 | 80 | +----+-----------+-------+
![]() | 这将返回所有包含子字符串姓“张”的姓名,就是以"张"开头的。INSTR可以和LIKE语句一样实现模糊查询。其模糊查询效率比LIKE快 |
mysql> SELECT * FROM student WHERE INSTR(name, '三') > 0; +----+-----------+-------+ | id | name | score | +----+-----------+-------+ | 1 | 张三名 | 80 | | 4 | 赵六三 | 40 | | 5 | 三七熊 | 60 | +----+-----------+-------+
把包含“三”字的姓名都列出来
mysql> SELECT * FROM student WHERE INSTR(name, '三') = 0; +----+-----------+-------+ | id | name | score | +----+-----------+-------+ | 2 | 李四浩 | 90 | | 3 | 王五期 | 70 | +----+-----------+-------+
把姓名不包含“三”字的所以姓名列出来。相当于 NOT LIKE语句。
LOCATE函数的参数顺序为子字符串在前,字符串在后。
INSTR函数的参数顺序为字符串在前,子字符串在后。
LOCATE比INSTR多一个参数
LOCATE比INSTR性能好
INSTR函数返回的位置是从1开始计数的,而不是从0开始。这意味着子字符串的第一个字符的位置为1。
如果子字符串不存在于主字符串中,INSTR函数将返回0。因此,在使用返回值时要注意这一点,以免出现意外的结果。
在使用INSTR函数时,要注意性能问题。如果主字符串非常长,或者需要搜索的子字符串很多,那么使用INSTR函数可能会影响查询性能。在这种情况下,可以考虑使用其他方法来进行搜索,例如使用正则表达式。
INSTR函数的参数是字符串,因此如果传递的参数不是字符串类型,将会引发错误。因此,在使用INSTR函数之前,要确保传递的参数是正确的数据类型。
INSTR函数只能用于简单的字符串搜索。如果需要进行更复杂的搜索,例如基于模式的搜索或使用正则表达式,那么应该考虑使用其他函数或方法,例如REGEXP或LIKE。