首页
技术小册
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.3 LEFT(s,n)取左函数 在MySQL数据库系统中,字符串处理是数据操作与查询中不可或缺的一部分。无论是数据分析、报表生成还是简单的数据验证,都需要对字符串进行灵活的操作。`LEFT(s,n)`函数作为MySQL提供的众多字符串函数之一,其功能是从字符串`s`的左侧开始,截取前`n`个字符并返回这部分字符串。这个功能在处理日期、姓名、地址等需要部分信息展示的场合尤为有用。本章节将深入探讨`LEFT(s,n)`函数的用法、实例、以及在实际应用中的技巧与注意事项。 #### 10.3.3.1 函数概述 `LEFT(s,n)`函数的基本语法如下: ```sql LEFT(str, len) ``` - `str`:要从中提取子字符串的原始字符串。 - `len`:一个正整数,指定要从`str`左侧开始截取的字符数。 返回值是一个字符串,包含了`str`字符串左侧起的前`len`个字符。如果`len`大于`str`的长度,则`LEFT(s,n)`函数将返回整个`str`字符串。如果`len`为负数,MySQL的行为可能因版本而异,但大多数现代版本会返回空字符串或抛出错误,因此在实际应用中应避免传递负值。 #### 10.3.3.2 基本用法示例 假设我们有一个名为`students`的表,其中有一个名为`fullname`的字段,用于存储学生的全名。如果我们想要获取每位学生的姓(假设名字的第一个字符为姓),我们可以使用`LEFT`函数结合一些其他技巧来实现这一目的(虽然这个假设可能并不完全准确,但仅用于说明`LEFT`函数的基本用法)。 ```sql SELECT fullname, LEFT(fullname, 1) AS surname_first_char FROM students; ``` 上述查询将返回每个学生的全名和他们名字的第一个字符(作为“姓”的首字符)。注意,这里假设并不准确,仅用于演示。 更实际的用例可能是截取电子邮箱的用户名部分(即`@`符号前的部分)。假设我们有一个名为`users`的表,其中包含`email`字段: ```sql SELECT email, LEFT(email, INSTR(email, '@') - 1) AS username FROM users; ``` 这里,`INSTR(email, '@')`函数返回`@`符号在`email`字段中的位置,然后`LEFT`函数截取从开始到`@`符号前一位的所有字符,即邮箱的用户名部分。 #### 10.3.3.3 进阶应用 `LEFT`函数可以与其他字符串函数或条件语句结合使用,以实现更复杂的字符串处理逻辑。 **示例1:格式化电话号码** 假设电话号码存储在数据库中时包含国际区号、城市区号以及本地号码,但出于显示目的,我们只想显示前10位数字(即可能包含国际区号或城市区号加上部分本地号码)。 ```sql SELECT phone_number, LEFT(phone_number, 10) AS formatted_phone FROM contacts; ``` **示例2:检查数据一致性** 在某些情况下,我们可能需要检查某个字段是否以特定的前缀开始。比如,检查员工编号是否以`EMP-`开头: ```sql SELECT employee_id, CASE WHEN LEFT(employee_id, 4) = 'EMP-' THEN 'Valid' ELSE 'Invalid' END AS check_status FROM employees; ``` 这里,我们使用`CASE`语句结合`LEFT`函数来判断员工编号是否以`EMP-`开头,并据此返回不同的状态标识。 #### 10.3.3.4 注意事项 1. **性能考虑**:虽然`LEFT`函数在处理少量数据时性能影响不大,但在处理大型数据集时,如果频繁使用,可能会对性能产生一定影响。在这种情况下,考虑是否有必要使用该函数,或者是否可以通过优化数据模型来减少这种需求。 2. **字符集和排序规则**:`LEFT`函数的行为可能受到字符集和排序规则的影响。在处理多字节字符集(如UTF-8)时,要特别注意,因为一个字符可能由多个字节组成。在大多数情况下,MySQL能够正确处理这些情况,但在设计查询和测试时仍需留意。 3. **安全性**:当使用`LEFT`函数处理用户输入或不确定来源的数据时,应考虑安全性问题,特别是防止SQL注入等攻击。虽然`LEFT`函数本身不直接引入SQL注入的风险,但将其与其他动态SQL构建或数据处理逻辑结合使用时,应谨慎行事。 4. **数据类型兼容性**:`LEFT`函数通常用于处理字符串类型的数据。如果尝试对非字符串类型的数据(如整数、日期等)使用`LEFT`函数,MySQL可能会进行隐式类型转换,这可能会导致意外的结果。因此,在使用前,请确保数据类型与函数预期一致。 5. **空值处理**:如果`str`参数为`NULL`,则`LEFT(s,n)`函数将返回`NULL`。在处理可能包含`NULL`值的字段时,应使用`IFNULL`或`COALESCE`等函数来提供默认值或进行空值处理。 通过本章对`LEFT(s,n)`函数的深入探讨,我们了解了其基本用法、进阶应用以及在实际应用中的注意事项。掌握这一函数将有助于我们更有效地进行字符串处理,提升数据查询和处理的效率与准确性。
上一篇:
10.3.2 UPPER(s)函数和UCASE(s)字母大写函数
下一篇:
10.3.4 RTRIM(s)去空格函数
该分类下的相关小册推荐:
细说MySQL(零基础到高级应用)
MySQL从入门到精通(一)
MySQL从入门到精通(四)
SQL零基础到熟练应用(增删改查)
MySQL必会核心问题
MySQL从入门到精通(二)
MySQL从入门到精通(五)
MySQL8.0入门与实践
MySQL 实战 45 讲