首页
技术小册
AIGC
面试刷题
技术文章
MAGENTO
云计算
视频课程
源码下载
PDF书籍
「涨薪秘籍」
登录
注册
9.1 基本查询语句
9.2 单表查询
9.2.1 查询所有字段
9.2.2 查询指定字段
9.2.3 查询指定数据
9.2.4 带关键字IN的查询
9.2.5 带关键字BETWEEN AND的范围查询
9.2.6 带LIKE的字符匹配查询
9.2.7 用IS NULL关键字查询空值
9.2.8 带AND的多条件查询
9.2.9 带OR的多条件查询
9.2.10 用DISTINCT关键字去除结果中的重复行
9.2.11 用ORDER BY关键字对查询结果进行排序
9.2.12 用GROUP BY关键字分组查询
9.2.13 用LIMIT限制查询结果的数量
9.3 聚合函数查询
9.3.1 COUNT()统计函数
9.3.2 SUM()求和函数
9.3.3 AVG()平均数函数
9.3.4 MAX()最大值函数
9.3.5 MIN()最小值函数
9.4 连接查询
9.4.1 内连接查询
9.4.2 外连接查询
9.4.3 复合条件连接查询
9.5 子查询
9.5.1 带IN关键字的子查询
9.5.2 带比较运算符的子查询
9.5.3 带EXISTS关键字的子查询
9.5.4 带ANY关键字的子查询
9.5.5 带ALL关键字的子查询
9.6 合并查询结果
9.7 定义表和字段的别名
9.7.1 为表取别名
9.7.2 为字段取别名
9.8 使用正则表达式查询
9.8.1 匹配指定字符中的任意一个
9.8.2 使用“*”和“ ”来匹配多个字符
9.8.3 匹配以指定的字符开头和结束的记录
10.1 MySQL函数
10.2 数学函数
10.2.1 ABS(x)绝对值函数
10.2.2 FLOOR(x)向下取整函数
10.2.3 RAND()随机数函数
10.2.4 PI()圆周率函数
10.2.5 TRUNCATE(x,y)截断函数
10.2.6 ROUND(x)近似值函数和ROUND(x,y)四舍五入函数
10.2.7 SQRT(x)平方函数
10.3 字符串函数
10.3.1 INSERT(s1,x,len,s2)替换函数
10.3.2 UPPER(s)函数和UCASE(s)字母大写函数
10.3.3 LEFT(s,n)取左函数
10.3.4 RTRIM(s)去空格函数
10.3.5 SUBSTRING(s,n,len)截取函数
10.3.6 REVERSE(s)反转函数
10.3.7 FIELD(s,s1,s2,…,sn)位置函数
10.3.8 LOCATE(s1,s)、POSITION(s1 IN s)和INSTR(s,s1)3个位置函数
10.4 日期和时间函数
10.4.1 CURDATE()和CURRENT_DATE()当前日期函数
10.4.2 CURTIME()和CURRENT_TIME()当前时间函数
10.4.3 NOW()当前日期和时间函数
10.4.4 DATEDIFF(d1,d2)间隔天数函数
10.4.5 ADDDATE(d,n)日期计算函数
10.4.6 ADDDATE(d,INTERVAL expr type)日期时间计算函数
10.4.7 SUBDATE(d,n)日期计算函数
10.5 条件判断函数
10.6 系统信息函数
10.6.1 获取MySQL版本号、连接数和数据库名的函数
10.6.2 获取用户名的函数
10.6.3 获取字符串的字符集和排序方式的函数
10.7.1 格式化函数FORMAT(x,n)
10.7.2 改变字符集的函数
10.7.3 改变字段数据类型的函数
当前位置:
首页>>
技术小册>>
MySQL从入门到精通(三)
小册名称:MySQL从入门到精通(三)
### 10.3.8 LOCATE(s1,s)、POSITION(s1 IN s)和INSTR(s,s1) 三个位置函数 在MySQL中,字符串处理是一个极其重要的部分,尤其是在数据分析和报表生成等场景中。为了高效地在字符串中查找子串的位置,MySQL提供了多个内置函数,其中`LOCATE(s1,s)`、`POSITION(s1 IN s)`和`INSTR(s,s1)`是三个非常实用的位置函数。它们虽然功能相似,但在使用上略有不同,理解并熟练掌握这些函数能够显著提升数据处理的灵活性和效率。 #### 10.3.8.1 LOCATE(s1,s) 函数 `LOCATE(s1,s)`函数用于返回子串`s1`在字符串`s`中第一次出现的位置(索引从1开始)。如果未找到子串,则返回0。这个函数的基本语法是: ```sql LOCATE(substr, str, pos) ``` 其中,`substr`是要查找的子串,`str`是被搜索的字符串,而`pos`是可选参数,表示从`str`中的哪个位置开始搜索(默认为1,即从头开始)。 **示例**: ```sql SELECT LOCATE('world', 'Hello world!'); -- 返回 7 SELECT LOCATE('world', 'Hello world!', 8); -- 返回 0,因为从第8位开始找不到'world' SELECT LOCATE('W', 'Hello world!', 1); -- 返回 0,因为MySQL在比较时是区分大小写的 ``` #### 10.3.8.2 POSITION(s1 IN s) 函数 `POSITION(s1 IN s)`函数是`LOCATE`函数的一个语法变种,它同样用于返回子串`s1`在字符串`s`中第一次出现的位置(索引从1开始)。如果未找到子串,则返回0。这个函数的语法更直接地表达了其用途: ```sql POSITION(substr IN str) ``` 这里,`substr`是要查找的子串,`str`是被搜索的字符串。 **示例**: ```sql SELECT POSITION('world' IN 'Hello world!'); -- 返回 7 SELECT POSITION('World' IN 'Hello world!'); -- 返回 0,因为MySQL在比较时是区分大小写的 ``` #### 10.3.8.3 INSTR(s,s1) 函数 与`LOCATE`和`POSITION`函数稍有不同,`INSTR(s,s1)`函数也用于查找子串`s1`在字符串`s`中的位置,但其参数顺序是相反的,且它同样返回子串第一次出现的位置(索引从1开始)。如果未找到子串,则返回0。`INSTR`函数的一个额外特性是,它允许你指定一个可选的起始位置参数,这在某些场景下非常有用。 ```sql INSTR(str, substr, pos, occurrence) ``` - `str` 是被搜索的字符串。 - `substr` 是要查找的子串。 - `pos` 是可选参数,指定从哪个位置开始搜索(默认为1)。 - `occurrence` 是另一个可选参数,指定第几次出现的位置(默认为1)。不过,需要注意的是,MySQL的`INSTR`函数实际上并不直接支持通过`occurrence`参数来直接返回子串的第N次出现位置,这一参数在MySQL中通常被忽略,因为`INSTR`主要关注首次出现的位置。 **示例**: ```sql SELECT INSTR('Hello world!', 'world'); -- 返回 7 SELECT INSTR('Hello world!', 'o', 5); -- 返回 8,从第5位开始查找'o'的首次出现位置 -- 注意:虽然INSTR的语法包含occurrence参数,但在MySQL的实际使用中,它并不改变函数的行为 ``` #### 比较与选择 - **功能相似性**:`LOCATE`、`POSITION`和`INSTR`在基本功能上非常相似,都是用来查找子串在字符串中的首次出现位置。 - **参数顺序**:`LOCATE`和`POSITION`在参数顺序上保持一致(先子串后主串),而`INSTR`则相反(先主串后子串),这可能会根据用户的编程习惯或项目规范影响选择。 - **性能**:在大多数情况下,这三个函数在性能上的差异微乎其微,选择哪个主要取决于个人偏好或项目代码的一致性要求。 - **扩展性**:虽然`INSTR`在语法上提供了额外的参数(如`occurrence`),但在MySQL的实际实现中,这些参数并不改变其基本行为,因此在选择时无需过分考虑这一点。 #### 应用场景 - **数据验证**:在处理用户输入或外部数据源时,可以使用这些函数来验证字符串中是否包含特定的子串,如验证电子邮件地址中的域名部分。 - **文本分析**:在文本分析、日志处理等领域,这些函数可以帮助你快速定位关键信息或分割字符串。 - **数据清洗**:在数据清洗过程中,它们可以用来识别并去除或替换掉不需要的字符串部分,如去除URL中的查询参数。 综上所述,`LOCATE(s1,s)`、`POSITION(s1 IN s)`和`INSTR(s,s1)`是MySQL中非常实用的字符串位置查找函数。它们各自的特点和用法虽有细微差别,但在大多数场景下都能相互替代。熟练掌握这些函数,将极大地提升你在处理字符串数据时的效率和灵活性。
上一篇:
10.3.7 FIELD(s,s1,s2,…,sn)位置函数
下一篇:
10.4 日期和时间函数
该分类下的相关小册推荐:
MySQL从入门到精通(四)
细说MySQL(零基础到高级应用)
MySQL8.0入门与实践
MySQL必会核心问题
MySQL从入门到精通(五)
MySQL从入门到精通(二)
MySQL从入门到精通(一)
MySQL 实战 45 讲
SQL零基础到熟练应用(增删改查)