内置函数(LOCATE、POSITION、INSTR、FIND_IN_SET)

Exisi 2023-02-12 12:10:13
Categories: Tags:

函数

说明

 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。不区分大小写

 

  • 通过内置函数 LOCATEPOSITIONINSTR 进行匹配,相当于Java中的str.contains()方法,返回的是匹配内容在字符串中的位置,效率和可用性上都优于通配符匹配。

 

  • LOCATEPOSITIONINSTR 函数可以用于代替 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。 如果substrstrNULL,则返回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