函数 |
说明 |
LOCATE(substr,str) |
返回字符串 str中字符串substr的第一个出现位置,若substr 不在str中,则返回值为0,不区分大小写 |
LOCATE(substr, str, [pos]) |
返回字符串str中子字符串substr的第一个出现位置, 起始位置在pos,若substr 不在str中,则返回值为0,不区分大小写 |
POSITION(substr IN str) |
返回字符串str中子字符串substr的第一个出现位置。,若substr 不在str中,则返回值为0,不区分大小写 |
INSTR(str,substr) |
查找到的字符串的位置。如果没有查找到,返回0。不区分大小写 注 如果start的值为负数,则代表从右往左进行查找,但是位置数据仍然从左向右计算。 |
FIND_IN_SET(str,strlist) |
strlist是一个由一些被 (‘,’) 符号分开的自链组成的字符串 如果str不在strlist 或strlist 为空字符串,则返回值为 0。不区分大小写 |
- 通过内置函数 LOCATE、POSITION、INSTR 进行匹配,相当于Java中的str.contains()方法,返回的是匹配内容在字符串中的位置,效率和可用性上都优于通配符匹配。
- LOCATE、POSITION、INSTR 函数可以用于代替 LIKE %A% 模糊搜索方式,速度会相对比后者快,但是不区分字符串大小写
示例
SELECT * FROM user WHERE INSTR(`userName`, '张') > 0;
SELECT * FROM user WHERE LOCATE('张', `userName`) > 0;
SELECT * FROM user WHERE POSITION( '张' IN `userName`) > 0;
- 如上,三种内置函数默认都是:> 0,所以下列 > 0 可加可不加,加上可读性更好。
注
MySQL中的角标从左往右是从1开始的,因此在MySQL中角标为0时说明不存在。
LOCATE()
- LOCATE() 函数可以指定寻找str出现的位置,相比 LIKE %A% 模糊搜索方式更灵活
语法
LOCATE(substr,str)
返回 substr 在 str 中第一次出现的位置。如果 substr 在 str 中不存在,返回值为 0,如果substr 在 str 中存在,返回值为:substr 在 str中第一次出现的位置。
语法
LOCATE(substr, str, [pos])
从位置pos开始的字符串str中第一次出现子字符串substr的位置。 如果substr不在str中,则返回0。 如果substr或str为NULL,则返回NULL
示例
SELECT LOCATE('a', 'banana'); -- 2
SELECT LOCATE('a',
'banana', 3); -- 4
SELECT LOCATE('z',
'banana'); -- 0
SELECT LOCATE(10,
'banana'); -- 0
SELECT LOCATE(NULL , 'banana'); -- null
SELECT LOCATE('a'
, NULL ); -- null
示例
SELECT * FROM app_info WHERE LOCATE('网', `appName`) > 0;
- 用 LOCATE 关键字进行模糊匹配, 从第二个字符开始匹配"网",则"网易云音乐、网易有道翻译"等数据就被过滤了
示例
SELECT * FROM app_info WHERE LOCATE('网', `appName`, 2) > 0;
POSITION()
- POSITION() 函数和 LOCATE() 函数作用相同。
语法
POSITION(substr IN substr)
- 返回字符串str中子字符串substr的第一个出现位置。,若substr 不在str中,则返回值为0,不区分大小写
示例
SELECT * FROM app_info WHERE POSITION( '网' IN `appName`) > 0 ;
INSTR()
- INSTR() 函数和 LOCATE() 函数作用相同,区别是 INSTR() 函数的参数的顺序相反
语法
INSTR(str,substr)
返回字符串str中第一次出现子字符串substr的位置。 如果 substr 在 str 中不存在,返回值为 0。
示例
SELECT * FROM app_info WHERE INSTR(`appName`, '网') > 0 ;
FIND_IN_SET()
- FIND_IN_SET() 函数用于查询用(‘,’) 符号分开字符串
语法
FIND_IN_SET(str,strlist)
strlist是一个由一些被 (‘,’) 符号分开的自链组成的字符串,如果str不在strlist 或strlist 为空字符串,则返回值为 0
示例
SELECT FIND_IN_SET("A", "a") ; -- 1
SELECT FIND_IN_SET("A", "A") ; -- 1
SELECT FIND_IN_SET("A", "AB") ; -- 0
SELECT FIND_IN_SET("A", "AB,qw") ; -- 0
SELECT FIND_IN_SET(NULL, "AB") ; -- null
示例
SELECT * FROM app_info WHERE FIND_IN_SET('b', describe) ; -- describe:'a,b,c,d' --> 1