背景介绍

在日常项目写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 入参是三个变量,可指定开始位置(可省略)