MySQL作为主流的关系型数据库,提供了丰富的内置函数来简化数据处理流程,其中最常用的三类函数分别是聚合函数、字符串函数和日期时间函数,它们覆盖了大部分日常数据处理场景。

一、聚合函数
聚合函数用于对一组数据进行统计计算,通常和GROUP BY子句配合使用,也可以单独使用对全表数据进行统计。常见的聚合函数如下:
| 函数名 | 功能说明 | 示例 |
|---|---|---|
| COUNT() | 统计符合条件的记录数 | COUNT(id) 统计id不为空的记录数 |
| SUM() | 计算数值列的总和 | SUM(price) 计算价格总和 |
| AVG() | 计算数值列的平均值 | AVG(score) 计算分数平均值 |
| MAX() | 获取列的最大值 | MAX(create_time) 获取最新创建时间 |
| MIN() | 获取列的最小值 | MIN(age) 获取最小年龄 |
以下是一个聚合函数的使用示例,统计用户表中不同年龄段的用户数量:
-- 统计各年龄段的用户数
SELECT
CASE
WHEN age < 18 THEN '未成年'
WHEN age BETWEEN 18 AND 40 THEN '青年'
ELSE '中老年'
END AS age_group,
COUNT(*) AS user_count
FROM user
GROUP BY age_group;
二、字符串函数
字符串函数用于处理文本类型的数据,支持文本的拼接、裁剪、替换、大小写转换等操作,常见的字符串函数如下:
CONCAT(str1, str2...):拼接多个字符串LENGTH(str):获取字符串的字节长度SUBSTRING(str, start, len):截取指定长度的子字符串REPLACE(str, old, new):替换字符串中的指定内容UPPER(str)/LOWER(str):转换字符串为大写/小写TRIM(str):去除字符串两端的空格
以下是字符串函数的使用示例,处理用户表中的用户名和邮箱信息:
-- 拼接用户名和邮箱,同时去除用户名两端空格,邮箱转为小写
SELECT
TRIM(username) AS clean_username,
LOWER(email) AS lower_email,
CONCAT(TRIM(username), '(', LOWER(email), ')') AS user_info
FROM user
WHERE id <= 10;
三、日期时间函数
日期时间函数专门用于处理时间类型的数据,支持时间提取、格式转换、时间差计算等功能,常见的日期时间函数如下:
NOW():获取当前日期和时间CURDATE():获取当前日期CURTIME():获取当前时间YEAR(date)/MONTH(date)/DAY(date):提取日期的年、月、日部分DATE_FORMAT(date, format):按照指定格式格式化日期DATEDIFF(date1, date2):计算两个日期的天数差
以下是日期时间函数的使用示例,统计用户注册时间和注册月份:
-- 提取用户注册月份,计算注册至今的天数 SELECT id, username, DATE_FORMAT(register_time, '%Y-%m') AS register_month, DATEDIFF(NOW(), register_time) AS register_days FROM user WHERE register_time >= '2023-01-01';
使用注意事项
在使用这三类函数时需要注意以下几点:
- 聚合函数如果和普通列一起查询,普通列必须出现在
GROUP BY子句中,否则查询结果不符合预期 - 字符串函数的索引从1开始,和很多编程语言的0开始索引不同
- 日期时间函数的参数需要是合法的日期格式,否则会返回NULL或者错误结果
- 函数嵌套使用时要注意执行顺序,内层函数的结果会作为外层函数的输入