MySQL 常用函数

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
RDS PostgreSQL Serverless,0.5-4RCU 50GB 3个月
推荐场景:
对影评进行热评分析
云数据库 RDS SQL Server,基础系列 2核4GB
简介: 我们这次全面梳理 MySQL 中的常用函数,涵盖 聚合函数、字符串函数、日期时间函数、数学函数 和 控制流函数 等五大类。每类函数均配有语法说明与实用示例,帮助读者提升数据处理能力,如统计分析、文本处理、日期计算、条件判断等。文章结尾提供了丰富的实战练习,帮助读者巩固和应用函数技巧,是进阶 SQL 编程与数据分析的实用工具手册。

核心目标: 学习使用 MySQL 内建函数来处理和计算数据,增强 SELECT 查询以及其他 SQL 语句的功能。

前提: 你已经熟悉基本的 SELECT 语句。函数通常用在 SELECT 的列列表、WHERE 子句、GROUP BY 子句、HAVING 子句或 ORDER BY 子句中。

1. 聚合函数 (Aggregate Functions)

作用:对一组行的值进行计算,并返回单个汇总值。常与 GROUP BY 结合使用。

  • COUNT(*) / COUNT(column) / COUNT(DISTINCT column):
    计算行数。COUNT(*) 计算所有行;COUNT(column) 计算指定列非 NULL 的行数;COUNT(DISTINCT column) 计算指定列唯一非 NULL 值的数量。
-- 总学生数
select count(*) as total_students from students;
-- 有效 GPA 记录的学生数 (gpa 非 NULL)
select count(gpa) as gpa_count from students;
-- 不同专业的数量
select count(distinct major) as distinct_major_count from students;
  • SUM(column):
    计算数值列的总和 (忽略 NULL)。
-- 所有产品总库存
select sum(stock_quantity) as total_stock from products;
  • AVG(column):
    计算数值列的平均值 (忽略 NULL)。
-- 平均 GPA
select avg(gpa) as average_gpa from students;
  • MAX(column):
    找出列中的最大值。
-- 最高价格
select max(price) as max_price from products;
  • MIN(column):
    找出列中的最小值。
-- 最低 GPA
select min(gpa) as min_gpa from students;

2. 字符串函数 (String Functions)

作用:用于操作和处理文本(字符串)数据。

  • CONCAT(str1, str2, ...):
    连接(拼接)字符串。
-- 拼接学生姓名
select concat(first_name, ' ', last_name) as full_name from students;
  • LENGTH(str):
    返回字符串的字节长度。对于多字节字符(如中文 UTF-8),结果可能大于字符数。
-- 产品名称的字节长度
select product_name, length(product_name) from products;
  • CHAR_LENGTH(str)CHARACTER_LENGTH(str):
    返回字符串的字符长度。
-- 产品名称的字符数
select product_name, char_length(product_name) from products;
  • SUBSTRING(str, pos, [len])SUBSTR(str, pos, [len]):
    提取子字符串。pos 从 1 开始,len 是可选的长度。
-- 提取专业名称前两个字
select major, substring(major, 1, 2) as major_prefix from students where major is not null;
  • UPPER(str) / LOWER(str):
    转换为大写/小写。
-- 产品名称大写
select upper(product_name) from products;
-- 邮箱小写
select lower(email) from students where email is not null;
  • REPLACE(str, from_str, to_str):
    替换字符串中的子串。
-- 将空格替换为下划线
select product_name, replace(product_name, ' ', '_') from products;
  • TRIM([{BOTH | LEADING | TRAILING} [remstr] FROM] str):
    去除首尾(BOTH)、开头(LEADING)或结尾(TRAILING)的空格或指定字符 remstr
-- 去除首尾空格
select trim('  some text   ') as trimmed; -- 'some text'
-- 去除开头的 '0'
select trim(leading '0' from '00123'); -- '123'

3. 日期和时间函数 (Date and Time Functions)

作用:用于处理日期和时间类型的数据。

  • NOW(): 返回当前日期和时间 (YYYY-MM-DD HH:MM:SS)。
  • CURDATE(): 返回当前日期 (YYYY-MM-DD)。
  • CURTIME(): 返回当前时间 (HH:MM:SS)。
select now(), curdate(), curtime();
  • DATE(datetime_expr) / TIME(datetime_expr):
    提取日期/时间部分。
-- 假设 created_at 是 DATETIME 类型
-- select date(created_at), time(created_at) from orders;
  • YEAR(date_expr) / MONTH(date_expr) / DAY(date_expr):
    提取年/月/日。
-- 提取入学年份
select student_name, year(enrollment_date) as enroll_year from students;
  • DATE_ADD(date, INTERVAL expr unit) / DATE_SUB(date, INTERVAL expr unit):
    日期加/减时间间隔。unit 可以是 DAY, WEEK, MONTH, YEAR, HOUR, MINUTE, SECOND 等。
-- 当前日期加 7 天
select date_add(curdate(), interval 7 day) as next_week;
-- 当前时间减 1 小时
select date_sub(now(), interval 1 hour) as hour_ago;
  • DATEDIFF(date1, date2):
    返回两个日期之间的天数差 (date1 - date2)。
-- 计算入学至今的天数
select student_name, datediff(curdate(), enrollment_date) as days_enrolled from students;
  • DATE_FORMAT(date, format):
    按指定格式格式化日期。format 是格式代码(如 %Y 年, %m 月, %d 日, %H 时24h, %i 分, %s 秒)。
-- 格式化入学日期为 YYYY年MM月DD日
select student_name, date_format(enrollment_date, '%Y年%m月%d日') as formatted_date from students;

4. 数学函数 (Mathematical Functions)

作用:执行数学运算。

  • ABS(x):
    返回 x 的绝对值。
select abs(-50); -- 50
  • ROUND(x, [d]):
    四舍五入到 d 位小数(默认为 0)。
select round(123.456); -- 123
select round(123.456, 2); -- 123.46
  • CEIL(x)CEILING(x):
    向上取整(返回大于或等于 x 的最小整数)。
select ceil(4.1); -- 5
  • FLOOR(x):
    向下取整(返回小于或等于 x 的最大整数)。
select floor(4.9); -- 4
  • RAND():
    返回 0 到 1 之间(不含 1)的随机浮点数。
-- 获取一个随机学生
select * from students order by rand() limit 1;
  • MOD(N, M)N % M:
    取模(N 除以 M 的余数)。
select mod(10, 3); -- 1
select 10 % 3; -- 1

5. 控制流函数 (Control Flow Functions)

作用:在 SQL 中实现条件逻辑。

  • IF(condition, value_if_true, value_if_false):
    如果 condition 为真,返回 value_if_true,否则返回 value_if_false
-- 根据 GPA 判断是否优秀
select student_name, gpa, if(gpa >= 3.5, '优秀', '良好') as performance from students;
  • IFNULL(expr1, expr2):
    如果 expr1 不为 NULL,返回 expr1,否则返回 expr2。常用于处理 NULL 值。
-- 如果 major 为 NULL,显示 '未分配'
select student_name, ifnull(major, '未分配') as student_major from students;
  • COALESCE(expr1, expr2, ...): 返回参数列表中第一个非 NULL 的表达式,功能更强大。
-- select coalesce(preferred_name, first_name, 'N/A') as display_name from users;
  • CASE WHEN condition1 THEN result1 [WHEN condition2 THEN result2 ...] [ELSE else_result] END:
    多重条件判断(类似 if-else if-else)。
-- 根据价格区间给产品分类
select product_name, price,
case
when price < 100 then '经济型'
when price between 100 and 500 then '标准型'
when price > 500 then '高端型'
else '价格未知' -- 可选的 ELSE
end as price_category
from products;
  • CASE expression WHEN value1 THEN result1 [WHEN value2 THEN result2 ...] [ELSE else_result] END:
    简单 CASE 表达式,判断 expression 是否等于 value
-- 根据部门 ID 显示部门名称 (假设 1=HR, 2=IT)
-- select emp_name,
-- case dept_id
-- when 1 then '人力资源部'
-- when 2 then '信息技术部'
-- else '其他部门'
-- end as department_name
-- from employees;

练习题 (Practice Exercises - Functions with Answers)

假设使用之前的 studentsproducts 表数据。

  1. 统计 students 表中共有多少个 '计算机科学' 专业的学生。
    答案:
select count(*) from students where major = '计算机科学';
  1. 计算 products 表中所有产品的平均价格,结果保留两位小数。
    答案:
select round(avg(price), 2) as average_price from products;
  1. 查询 students 表中每个专业的最高 GPA。
    答案:
select major, max(gpa) as highest_gpa from students where major is not null group by major;
  1. 查询 products 表中所有产品名称,并将其转换为大写。
    答案:
select upper(product_name) as uppercase_name from products;
  1. 查询 students 表中所有学生的姓名(姓和名拼接,中间加空格)和入学年份。
    答案:
select concat(first_name, ' ', last_name) as full_name, year(enrollment_date) as enrollment_year from students;
  1. 查询 products 表中所有价格超过 500 元的产品,并计算其价格打九折后的结果(保留两位小数)。
    答案:
select product_name, price, round(price * 0.9, 2) as discounted_price from products where price > 500;
  1. 查询 students 表中入学日期在 '2022-01-01' 之后的学生人数。
    答案:
select count(*) from students where enrollment_date > '2022-01-01';
  1. 查询 students 表中每个专业名称的字符长度。
    答案:
select distinct major, char_length(major) as major_length from students where major is not null;
  1. 找出 products 表中库存量大于 100 且产品名称包含 '耳机' 的产品数量。
    答案:
select count(*) from products where stock_quantity > 100 and product_name like '%耳机%';
  1. 查询 students 表,计算每个学生入学 1 年后的日期。
    答案:
select student_id, enrollment_date, date_add(enrollment_date, interval 1 year) as one_year_after_enrollment from students;
  1. 查询 students 表,显示学生姓名,如果专业 (major) 为 NULL,则显示 "待定专业",否则显示原专业名称。
    答案:
select student_name, ifnull(major, '待定专业') as student_major from students;
  1. 查询 products 表,根据库存量 (stock_quantity) 显示库存状态:0 表示 '售罄', 1-50 表示 '库存紧张', 大于 50 表示 '库存充足'。
    答案:
select product_name, stock_quantity,
case
when stock_quantity = 0 then '售罄'
when stock_quantity between 1 and 50 then '库存紧张'
when stock_quantity > 50 then '库存充足'
else '状态未知'
end as stock_status
from products;
相关实践学习
每个IT人都想学的“Web应用上云经典架构”实战
本实验从Web应用上云这个最基本的、最普遍的需求出发,帮助IT从业者们通过“阿里云Web应用上云解决方案”,了解一个企业级Web应用上云的常见架构,了解如何构建一个高可用、可扩展的企业级应用架构。
MySQL数据库入门学习
本课程通过最流行的开源数据库MySQL带你了解数据库的世界。 &nbsp; 相关的阿里云产品:云数据库RDS MySQL 版 阿里云关系型数据库RDS(Relational Database Service)是一种稳定可靠、可弹性伸缩的在线数据库服务,提供容灾、备份、恢复、迁移等方面的全套解决方案,彻底解决数据库运维的烦恼。 了解产品详情:&nbsp;https://www.aliyun.com/product/rds/mysql&nbsp;
目录
相关文章
|
JSON 关系型数据库 MySQL
Mysql(5)—函数
MySQL提供了许多内置的函数以帮助用户进行数据操作和分析。这些函数可以分为几类,包括聚合函数、字符串函数、数值函数、日期和时间函数、控制流函数等。
284 1
Mysql(5)—函数
|
8月前
|
SQL 关系型数据库 MySQL
【YashanDB知识库】MySQL field 函数的改写方法
【YashanDB知识库】MySQL field 函数的改写方法
|
8月前
|
SQL 关系型数据库 MySQL
【YashanDB知识库】MySQL field 函数的改写方法
本文来自YashanDB官网,介绍将MySQL的FIELD函数改写到YashanDB的方法。MySQL中,FIELD函数用于自定义排序;而在YashanDB中,可使用DECODE或CASE语句实现类似功能。示例展示对表`t1`按指定顺序排序的过程,提供两种改写方式,结果均符合预期。
|
10月前
|
SQL 关系型数据库 MySQL
Mysql-常用函数及其用法总结
以上列举了MySQL中一些常用的函数及其用法。这些函数在日常的数据库操作中非常实用,能够简化数据查询和处理过程,提高开发效率。掌握这些函数的使用方法,可以更高效地处理和分析数据。
277 19
|
11月前
|
SQL 关系型数据库 MySQL
【MySQL基础篇】盘点MySQL常用四大类函数
本文介绍了MySQL中的四大类常用函数:字符串函数、数值函数、日期函数和流程函数。
【MySQL基础篇】盘点MySQL常用四大类函数
|
11月前
|
数据采集 关系型数据库 MySQL
MySQL常用函数:IF、SUM等用法
本文介绍了MySQL中常用的IF、SUM等函数及其用法,通过具体示例展示了如何利用这些函数进行条件判断、数值计算以及复杂查询。同时,文章还提到了CASE WHEN语句和其他常用函数,如COUNT、AVG、MAX/MIN等,强调了它们在数据统计分析、数据清洗和报表生成中的重要性。
|
11月前
|
SQL 关系型数据库 MySQL
MySQL常见函数第二期,你都用过哪些呢 ?
本期介绍了20个常用的MySQL函数,涵盖日期处理(如CURDATE()、DATE_FORMAT())、数学运算(如ABS()、ROUND())、统计分析(如COUNT()、SUM())等,帮助提高SQL查询效率和数据处理能力。希望对大家的学习有所帮助。
287 7
|
11月前
|
关系型数据库 MySQL
MySQL常见函数第一期,你都用过哪些呢 ?
本期介绍10个常用的MySQL函数:字符串连接(CONCAT)、提取子字符串(SUBSTRING)、获取字符串长度(LENGTH)、转换大小写(UPPER、LOWER)、去除空格(TRIM)、替换字符串(REPLACE)、查找子字符串位置(INSTR)、带分隔符的字符串连接(CONCAT_WS)以及获取当前日期时间(NOW)。
260 8
|
11月前
|
关系型数据库 MySQL 数据处理
【MySQL】函数
MySQL 提供了丰富的函数集,涵盖字符串处理、数值运算、日期时间操作和聚合计算等多个方面。这些函数在日常数据库操作中极为重要,通过合理使用这些函数,可以大大提高数据处理和查询的效率。用户还可以通过自定义函数,扩展 MySQL 的功能以满足特定需求。
243 3
|
12月前
|
关系型数据库 MySQL 数据处理
MySQL函数与约束
MySQL 提供了丰富的函数和强大的约束机制,用于数据处理和完整性维护。通过掌握这些工具,可以有效地管理和分析数据库中的数据,确保数据的一致性和准确性。无论是在日常数据查询中使用内置函数,还是在数据库设计中应用各种约束,都是确保数据库系统稳定、高效运行的关键。希望本文对您理解和应用 MySQL 函数与约束有所帮助。
164 1

相关产品

  • 云数据库 RDS MySQL 版
  • 推荐镜像

    更多