MySQL 字符串操作(substr-截取、locate-instr-position子父串判断)
背景介绍
在日常项目写MySQL语句的时,常用到的函数,如对字符串截取,子父串关系的匹配等,这里记录下来,方便备查。
一、字符串截取
1、函数-substr
==substr== 是MySQL 自带的字符串截取函数。 基本语法是 ==**substr [str, num, length]**==
1.1 选项参数
str 目标字符串; num 截取的起始位置,从 ==1== 开始; length 待截取的长度,省略则表示字符串的长度。
1.2 demo演示
1)省略第三个参数,则表示展示目标字符串全部 2)起始位置 为 0,不生效,查询结果为空 3)指定起始位置 和 长度,效果如下所示。
2、函数-substring_index
==substring_index== 是MySQL 自带的字符串截取函数,将目标字符串以分隔符来分段,计数count来取第几个。 基本语法是 ==**substring_index [str, delim,count]**==
2.1 选项参数
str 目标字符串; delim 分隔符; count 计数,为正时,从左往右;为负时,从右往左。
2.2 demo演示
1)取 前一部分,即 www,如下图所示。 2)取 域名后缀,如下图所示。 3)取中间部分,即 双层嵌套,如下图所示。
二、子父串包含判断
1、函数-locate
==locate== 是MySQL 自带的字符串函数,判断一个字符串是否包含另一个字符串,返回出现的位置。 基本语法是 ==**locate [substr, str,num]**==
1.1 选项参数
str 目标字符串; substr 子字符串。 num 起始位置,默认为1,可以省略。
1.2 demo演示
1)子串存在于父串,则显示 www 第一次出现的位置,查询结果为 1。 删除前面的www,再次查询则显示第二个匹配到的子串的位置,为11。 2)子串不存在于父串,则显示查询结果为 0。 父串是否包含子串的判断,除了 locate 函数,还有 position 函数 和 instr 函数
2、函数-position
==position== 是MySQL 自带的字符串函数,返回子串第一次出现在父串出现的位置,不区分大小写。 基本语法是 ==**position [substr in str]**==
2.1 选项参数
str 目标字符串; substr 子字符串。
2.2 demo演示
1)子串存在于父串,则显示 www 第一次出现的位置,查询结果为 1。 删除前面的www,再次查询则显示第二个匹配到的子串的位置,为11。 2)子串不存在于父串,则显示查询结果为 0。
3、函数-instr
==instr== 是MySQL 自带的字符串函数,返回子串首次出现在父串出现的位置,不区分大小写。 基本语法是 ==**instr [str , substr ]**==
3.1 选项参数
str 目标字符串; substr 子字符串。
3.2 demo演示
1)子串存在于父串,则显示 www 首次出现的位置,查询结果为 1。 删除前面的www,再次查询则显示第二个匹配到的子串的位置,为11。 2)子串不存在于父串,则显示查询结果为 0。
4、函数-find_in_set
==find_in_set== 是MySQL 自带的字符串函数,返回子串在list中的位置,其中list中元素以逗号分隔。 基本语法是 ==**find_in_set [str , strlist ]**==
4.1 选项参数
str 子字符串; **strlist ** 字符串list集合,以逗号分隔。
4.2 demo演示
1)子串存在于list,则显示 www 出现的位置,查询结果为 1。 删除前面的www,再次查询则显示匹配到的 按逗号分隔的子串的位置,为4。 2)子串不存在于父串,则显示查询结果为 0。
总结
1)==locate函数==、==position函数== 和 ==instr 函数== 的异同 相同之处:子串与父串的匹配过程,匹配成功则返回 子串在父串中第一次匹配到的位置,未匹配到则返回0。 不同之处: 参数的顺序不同,locate 入参是三个变量,可指定开始位置(可省略)。